[英]how to pass sql query to procedure as a parameter?
create or replace procedure sqldynamic(sqlquery sys_refcursor)
is
cursor c1 is sqlquery;
begin
open c1;
end;
如果您想将SQL查询作为参数传递,请尝试以下操作
CREATE OR REPLACE PROCEDURE sqldynamic (sqlquery IN SYS_REFCURSOR)
IS
BEGIN
LOOP
FETCH sqlquery INTO <your variables>;
EXIT WHEN sqlquery %NOTFOUND;
END LOOP;
END
并执行上述步骤
DECLARE
my_cursor SYS_REFCURSOR;
BEGIN
OPEN my_cursor FOR
SELECT <columns>
FROM <your_table>;
sqldynamic (my_cursor);
CLOSE my_cursor;
END;
在<>
替换任何认为必要的内容
例如
CREATE OR REPLACE PROCEDURE sqldynamic (sqlquery IN SYS_REFCURSOR)
IS
v_emp_number employees.emp_number%TYPE;
v_emp_name employees.employee_name%TYPE;
BEGIN
LOOP
FETCH sqlquery INTO v_emp_number, v_emp_name;
DBMS_OUTPUT.put_line (
'v_emp_number ' || v_emp_number || ' v_emp_name ' || v_emp_name);
EXIT WHEN sqlquery%NOTFOUND;
END LOOP;
END;
并以PL / SQL块的形式执行上述过程
DECLARE
my_cursor SYS_REFCURSOR;
BEGIN
OPEN my_cursor FOR SELECT emp_number, employee_name FROM employees WHERE emp_number=108;
sqldynamic (my_cursor);
CLOSE my_cursor;
END;
您不必打开游标,它已经打开。 只是使
create or replace procedure sqldynamic(sqlquery sys_refcursor) is
begin
LOOP
FETCH sqlquery INTO ...;
EXIT WHEN sqlquery%NOTFOUND;
...
END LOOP;
end;
您将这样调用该过程:
DECLARE
curSel SYS_REFCURSOR;
BEGIN
OPEN curSel FOR ...;
sqldynamic(curSel);
END;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.