Oracle 如何在sql中向传递字符串以执行并生成外部查询的输出

Oracle 如何在sql中向传递字符串以执行并生成外部查询的输出,oracle,Oracle,我在oracle存储过程中有一个变量 GDFCID_STRING2 VARCHAR2(1000); GDFCID_STRING := ' select regexp_substr(''1005771621,1001035181'',''[^,]+'', 1, level) from dual connect by regexp_substr(''1005771621,1001035181'', ''[^,]+'', 1, level) is not null '; 我想使用该变

我在oracle存储过程中有一个变量

GDFCID_STRING2 VARCHAR2(1000);
GDFCID_STRING := ' select regexp_substr(''1005771621,1001035181'',''[^,]+'', 1, level)         from dual
connect by regexp_substr(''1005771621,1001035181'', ''[^,]+'', 1, level) is not null ';
我想使用该变量在in子句中执行相同的查询,如下-> 在存储过程中,我有一个sql->

select * from xyz where gfcid in
(--here I want to execute the above query (GDFCID_STRING) 
and feed the output of query as input to IN clause--)

只需将查询放入
in子句
本身即可。不需要动态执行它

SELECT * 
FROM   xyz 
WHERE  gfcid IN (SELECT Regexp_substr('1005771621,1001035181', '[^,]+', 1, LEVEL 
                        ) 
                 FROM   dual 
                 CONNECT BY Regexp_substr('1005771621,1001035181', '[^,]+', 1, 
                            LEVEL) 
                            IS NOT 
                            NULL)
例如,让我们使用
EMP
表查看一个测试用例:

SQL> SELECT empno,
  2         ename,
  3         deptno
  4  FROM   emp
  5  WHERE  ename IN
  6         (
  7            SELECT Regexp_substr('SMITH,SCOTT','[^,]+', 1, LEVEL)
  8            FROM   dual
  9            CONNECT BY Regexp_substr('SMITH,SCOTT', '[^,]+', 1, LEVEL) IS NOT NULL)
 10  /

     EMPNO ENAME          DEPTNO
---------- ---------- ----------
      7369 SMITH              20
      7788 SCOTT              20

SQL>