我得到错误:的Oracle PL/SQL:功能光标
时执行以下代码PLS-00231: function 'GET_NUM' may not be used in SQL
;
CREATE OR REPLACE PACKAGE BODY TESTJNSABC IS
-- FUNCTION IMPLEMENTATIONS
FUNCTION get_num(num IN NUMBER)
RETURN SYS_REFCURSOR AS
my_cursor SYS_REFCURSOR;
BEGIN
--
OPEN my_cursor FOR
WITH ntable AS (
SELECT 1 ID, 111 AGT, 'ABC' DESCRIP FROM DUAL
UNION ALL
SELECT 2 ID, 222 AGT, 'ABC' DESCRIP FROM DUAL
UNION ALL
SELECT 1 ID, 333 AGT, 'ABC' DESCRIP FROM DUAL
)
SELECT AGT FROM ntable WHERE ID = num;
RETURN my_cursor;
END;
-- PROCEDURE IMPLEMENTATIONS
PROCEDURE testingabc AS
BEGIN
WITH xtable AS (
SELECT 111 AGT, 'A' DESCRIP FROM DUAL
UNION ALL
SELECT 222 AGT, 'B' DESCRIP FROM DUAL
UNION ALL
SELECT 333 AGT, 'C' DESCRIP FROM DUAL
)
SELECT DESCRIP FROM xtable WHERE COD_AGT IN get_num(1);
END testingabc;
END TESTJNSABC;
即使我将该函数调用为TESTJNSABC.get_num(1)
我仍然会得到相同的错误。 --UPDATE。所以在现实生活中,我想从WHERE CLAUSE调用函数;该函数应该返回一组NUMBER值(这就是我使用IN子句的原因)。
您这里有一些问题。如果你能解释你想要这些程序做什么,那么帮助你会容易些。 – Aleksej
错误似乎很清楚?你不能在SQL语句中使用你的函数,你只能从其他PL/SQL上下文中调用它(至少直到12c)。 –
您不能使用以这种方式返回引用游标的函数。它通常用于在PL/SQL中传递结果集指针的上下文中。你可以接近,但你需要使用流水线功能,而不知道你想要的答案,包括那是毫无意义的。 – BriteSponge