如何将 SQL 传递给在 DB2 中以字符串形式出现的 Cursor?

问题描述

我想将 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@