我的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可以作为函数的返回值。
答案 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;