问题描述
我想将 sql 作为字符串作为输入传递给我的存储过程,而我的存储过程会将这个 sql 作为字符串传递给游标并提供输出。但是 Cursor 不接受 sql 作为字符串,我们需要准备 sql 语句,然后将其传递给 Cursor。我无法使那部分工作。请在此处找到我的示例代码:
Create Procedure abc(IN stmt VARCHAR(500))
SPECIFIC abc
LANGUAGE sql
DYNAMIC RESULT SETS 1
Re: BEGIN
DECLARE Instmt VARCHAR(500)
PREPARE Instmt FROM stmt;
EXECUTE Instmt;
DECLARE v_cur CURSOR WITH RETURN FOR Instmt;
OPEN v_cur;
END Re
--call abc('select ename,sal from emp')
它给了我一个错误,即 Cursor 期待一个 sql 语句。所以或多或少我无法正确准备 sql 以将其提供给 CURSOR。 错误信息: sql0104N “在“”之后找到了预期的标记“”。预期的标记可能包括:“”
请告诉我如何让它工作。
解决方法
试试这个
--#SET TERMINATOR @
CREATE OR REPLACE PROCEDURE TEST_PROC(IN stmt VARCHAR(500))
SPECIFIC TEST_PROC
LANGUAGE SQL
DYNAMIC RESULT SETS 1
BEGIN
DECLARE test_cur CURSOR WITH RETURN TO CALLER FOR test_stmt;
PREPARE test_stmt FROM stmt;
OPEN test_cur;
END@