我收到错误消息:
PLS-00231:函数'GET_NUM'不能在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)
也仍然会遇到相同的错误。 - 更新。因此,在现实生活中,我想从WHERE子句中调用Function;该函数应返回一组NUMBER值(这就是我使用IN子句的原因)。
in ()
需要一个子查询或一个逗号分隔的值列表,因此,不能,您不能替换返回集合的函数。
假设该函数在SQL查询的范围内(它是独立函数或在包规范中声明),则可以在table()
构造中使用它(这需要一个表函数,即它需要返回一个集合,而不是游标):
where somecol in (select column_value from table(get_num(1)) )
(或等效的内部联接等)
通过livesql.oracle.com/apex/livesql/file/content_EF2M0F1LV9LTP6PEII3BDFKAI.html进行演示
编辑:我刚刚注意到问题中的示例尝试使用ref游标。请注意,该table()
运算符适用于集合,而不适用于引用游标。因此,该函数必须返回集合类型(嵌套表或varray)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句