我有一个场景,我的选择状态存储为表格中具有以下结构的列值。
Id Query
---- -----
1 SELECT * FROM EMP WHERE EMP_ID= In_EMP_ID
我有一个过程,其中empid作为参数传递,过程中的游标从表EMP中取出上面的select语句,基于Id,这里是1。
程序
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分配给我的fetched select语句的where子句中的EMP_ID,该语句现在在l_select_stmt中可用?
答案 0 :(得分:1)
如果要使用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_id
而非in_emp_id
。另请注意,我已更改此特定示例的列/表的某些名称,以显示如何使用USING
的{{1}}子句。
输出:
John