oracle - 使用游标在oracle过程中进行动态查询

标签 oracle dynamic procedure

我正在使用存储过程通过游标选择记录。此过程获取记录 ID 作为输入。

代码如下:

create or replace
procedure GET_ITEM_DETAILS_ALL
(
  cur_out out sys_refcursor,
  PSTRING VARCHAR2 DEFAULT NULL
)
is
  query_string  VARCHAR2(1000);
Begin
  query_string := 'Select IT.SL_NO from ITEM_DETAILS IT where IT.SL_NO in (:sl) order by IT.SL_NO';
  OPEN cur_out FOR query_string USING PSTRING;
End;

为了调用/测试我使用以下代码的过程:

VAR R REFCURSOR
EXEC GET_ITEM_DETAILS_ALL (:R, '4')
PRINT R 

问题是当我传递单个整数(例如“4”或“2”)时,过程返回数据,但当我传递“1,2”或“3,4”时,它显示错误。

最佳答案

   OPEN cur_out FOR Select IT.SL_NO from ITEM_DETAILS IT where IT.SL_NO in (SELECT REGEXP_SUBSTR(sl,'[^,]+', 1, LEVEL) FROM DUAL CONNECT BY REGEXP_SUBSTR(sl, '[^,]+', 1, LEVEL) IS NOT NULL ) order by IT.SL_NO

关于oracle - 使用游标在oracle过程中进行动态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15184015/

相关文章:

c++ - 在临时指针上使用 "delete"后程序崩溃,即使只剩下新行和删除行?

sql - ORA-30009 : Not enough memory for CONNECT BY operation/ORA-01788: CONNECT BY clause required in this query block

sql - 如何在没有结果的情况下返回查询结果

mysql使用IN动态sql

ORACLE - 将程序/包导出到文件

mysql 程序不允许我声明变量

德尔福回调?

oracle - Oracle SQL Developer 在哪里存储连接?

oracle - Oracle 中如何将 CLOB 转换为 BLOB?

c++ - 既然可以使用=运算符给字符串赋值,为什么还要在赋值前使用new运算符动态分配内存给字符串呢?