Oracle Where与变量

时间:2018-10-03 10:36:25

标签: oracle plsql

我的plsql代码有问题。这只是我整个工作的一部分。

declare 
id number(2):=1; (here is function which returns any value)
check VARCHAR2(100);
begin
select COUNT(*) into check from T_SDSN_LOG Where ANY_ID=id AND CHECK LIKE 
'NAME';
dbms_output.put_line(check);
end; 

在这种情况下,我的选择返回0,尽管它应该为2。 如果我更换零件
其中ANY_ID = id为
在ANY_ID = 2的情况下,它可以完美运行。有什么建议吗?我需要id可以作为函数的返回值。

1 个答案:

答案 0 :(得分:0)

此函数使用本地定义的函数,因此在SQL中不可用,但可以在PL / SQL中引用。

DECLARE
   lnum_id      NUMBER := return_id;
   lnum_check   VARCHAR2(100);

   FUNCTION return_id
      RETURN NUMBER
   IS
   BEGIN
      RETURN 123456;
   END;
BEGIN
   lnum_id   := return_id;

   SELECT COUNT(*)
   INTO   lnum_check
   FROM   my_table
   WHERE  table_id = lnum_id;

   DBMS_OUTPUT.put_line(lnum_check);
END;

您可能想在包中使用此功能,在这种情况下,您可以在包头中声明该功能,在主体中编写该功能的代码,然后在SQL本身中引用它。因此,如果我在名为PKG_DATA_CHECKS的程序包中声明一个函数(FNC_RETURN_ID),该函数返回NUMBER,则可以执行以下操作;

DECLARE
   lnum_id      NUMBER;
   lnum_check   VARCHAR2(100);

BEGIN

   SELECT COUNT(*)
   INTO   lnum_check
   FROM   my_table
   WHERE  table_id = (SELECT pkg_data_checks.fnc_return_id FROM dual);

   DBMS_OUTPUT.put_line(lnum_check);
END;