【发布时间】:2020-01-28 03:31:25
【问题描述】:
我正在编写一个存储过程,它需要一个带有数字数组的 WHERE IN 子句。如何将这个数字数组传递给 SP。 我的想法是发送一个像'123,234,345'这样的字符串,然后在使用它之前在SP中解析它。这是一个好方法吗?如果是,我怎样才能使下面的代码工作?
CREATE OR REPLACE PROCEDURE sp_test2
(
ids in varchar2,
cursor_ OUT SYS_REFCURSOR
)
AS
BEGIN
OPEN cursor_ FOR
SELECT *FROM my_table
WHERE my_table.ID IN (
SELECT regexp_substr(ids,'[^:]+', 1, level) AS list FROM dual
CONNECT BY regexp_substr(ids, '[^:]+', 1, level) IS NOT NULL);
END;
/
例如(而不是转换代码)当这样使用时:IN(ids) 我得到 ORA-01722: 无效号码错误
【问题讨论】:
-
很遗憾没有,因为我认为我需要一个数字数组而不是 varchar2 数组
-
传递数字数组与传递 varchar2 数组的方式相同。只需将
CREATE OR REPLACE TYPE MyType AS VARRAY(200) OF VARCHAR2(50)更改为CREATE OR REPLACE TYPE MyType AS VARRAY(200) OF NUMBER并调整其他相关代码部分即可。 -
您考虑过使用Dynamic SQL 吗?
标签: oracle stored-procedures plsql