sql - 如何将sql查询作为参数传递给过程?
问题描述
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;
推荐阅读
- mysql - mySQL - 引用处理程序中的异常
- angular - Angular/HammerJS - 避免在捏合/捏出时旋转手势
- mysql - MySQL 8 带计数的嵌套选择
- javascript - 基于字符串值Angular 6的嵌套分组
- json - 如果接收到的值不匹配,则解码字典正确
- php - 如果不存在则设置 cookie,如果在 PHP 中存在则更新/覆盖
- python - TypeError:只有长度为 1 的数组可以转换为 Python 标量 - 复数
- authentication - Asp.Net Web Api 2 的 NSwag 在 swagger gui 中显示安全性
- ios - 滚动视图不能同时缩放和水平滚动?
- elasticsearch - 如何使用弹性 java api 查询计算字段