Plsql 选择语句作为带占位符的列值

Plsql 选择语句作为带占位符的列值,plsql,oracle11g,Plsql,Oracle11g,我有一个场景,其中我的select语句作为列值存储在表中,其结构如下 Id Query ---- ----- 1 SELECT * FROM EMP WHERE EMP_ID= In_EMP_ID 我有一个过程,其中empid作为参数传递,过程中的游标根据Id(此处为1)从表EMP中获取上面的select语句 程序是 Create or replace procedure EMP (In_EMP_ID

我有一个场景,其中我的select语句作为列值存储在表中,其结构如下

 Id               Query
 ----             -----
 1                SELECT * FROM EMP WHERE EMP_ID= In_EMP_ID
我有一个过程,其中empid作为参数传递,过程中的游标根据Id(此处为1)从表EMP中获取上面的select语句

程序是

  Create or replace procedure EMP (In_EMP_ID IN NUMBER)
  AS
  CURSOR get_stmt(id IN VARCHAR2) IS 
  SELECT Query from EMP WHERE id = id;

  l_select_stmt varchar2(200);
  BEGIN

  OPEN get_stmt(1);
  Fetch get_stmt into l_select_stmt;

  END;

现在,有没有可能将In_EMP_ID分配给我的已提取select语句where子句中的EMP_ID,该语句现在在l_select stmt中可用?

如果要使用
EXECUMTE IMMEDIATE
执行该select语句,可以使用绑定变量传递该ID。例如:

CREATE TABLE my_queries (
  id NUMBER,
  my_query VARCHAR2(200)
);

INSERT INTO my_queries VALUES (1, 'SELECT fname FROM EMP WHERE EMPID = :In_EMP_ID');
COMMIT;

CREATE OR REPLACE PROCEDURE emp_proc(In_EMP_ID IN NUMBER)
AS
  CURSOR get_stmt(id_par IN VARCHAR2) IS 
    SELECT my_query FROM my_queries WHERE id = id_par;

  l_select_stmt varchar2(200);
  l_name VARCHAR2(40);
BEGIN
  OPEN get_stmt(1);
  FETCH get_stmt INTO l_select_stmt;

  EXECUTE IMMEDIATE l_select_stmt 
    INTO l_name
    USING IN in_emp_id;

  dbms_output.put_line(l_name);
END;
/

EXEC emp_proc(1);
请注意,在查询中,您现在有
:in_emp\u id
,而不仅仅是
in_emp\u id
。还请注意,对于这个特定示例,我更改了一些列/表的名称,只是为了演示如何使用
executeimmediate
USING
子句

输出:

John
JohnTry要存储到EMP_ID=,并且在您的过程中使用字符串操作来框显您的查询。谢谢,考虑到这个解决方案,但是我有更多的值要放入where条件中,所以我必须将我的查询拆分4次,这不是我要查找的。非常感谢,如果我在where子句中有更多的值要签入,会怎么样?我可以在USING子句中使用多个值吗?@user1717270是的,您可以使用多个值,只需在逗号后指定它们,例如:
使用variable1、variable2、variable3
等等。每个变量都将绑定到查询中定义的占位符,占位符使用
(冒号)。明白了。我们可以在USING in子句中使用多列。。谢谢