简体   繁体   English

db2动态游标声明

[英]db2 dynamic cursor declaration

I am trying to create a stored procedure, but I get this error 我正在尝试创建存储过程,但出现此错误

Expected tokens may include: "". 预期的令牌可能包括:“”。 LINE NUMBER=17. LINE NUMBER = 17。 SQLSTATE=42601 SQLSTATE = 42601

My code: 我的代码:

CREATE OR REPLACE PROCEDURE FETCH_EMP_SP(IN V_EMP_NAME VARCHAR(100),IN V_EMP_DEPT VARCHAR(100))
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE p_query_string  VARCHAR(100);
IF ((V_EMP_NAME IS NOT NULL) AND (V_EMP_DEPT IS NOT NULL)) THEN
    SET p_query_string = 'emp_name ='||V_EMP_NAME||' AND emp_dept='||V_EMP_DEPT||' WITH UR';
ELSEIF(V_EMP_DEPT IS NOT NULL) THEN
    SET p_query_string = ' AND emp_dept='||V_EMP_DEPT||' WITH UR';
ELSE
    SET p_query_string = ' WITH UR';
END IF;

DECLARE C1 CURSOR WITH RETURN TO CLIENT FOR SELECT emp_name,emp_no,emp_dept,emp_location from employee where status=1 p_query_string;
OPEN C1;
END@

should be executed successfully 应该成功执行

Declarations and statements can't follow in arbitrary order in a Compound SQL (compiled) statement 复合SQL(已编译)语句中的声明和语句不能以任意顺序出现

Cursor declarations must follow the variables declarations and must be followed by the SQL procedure statements. 游标声明必须在变量声明之后,并且必须在SQL过程语句之后。

So, place the cursor declaration after the variable declaration. 因此,将游标声明放置在变量声明之后。

Moreover, there is a number of other errors in your code. 此外,您的代码中还有许多其他错误。 Should be something like this: 应该是这样的:

CREATE OR REPLACE PROCEDURE FETCH_EMP_SP(IN V_EMP_NAME VARCHAR(100),IN V_EMP_DEPT VARCHAR(100))
DYNAMIC RESULT SETS 1
LANGUAGE SQL
BEGIN
DECLARE p_query_string  VARCHAR(256);
DECLARE C1 CURSOR WITH RETURN TO CLIENT FOR S1;

IF ((V_EMP_NAME IS NOT NULL) AND (V_EMP_DEPT IS NOT NULL)) THEN
    SET p_query_string = ' AND emp_name ='''||V_EMP_NAME||''' AND emp_dept='''||V_EMP_DEPT||''' WITH UR';
ELSEIF(V_EMP_DEPT IS NOT NULL) THEN
    SET p_query_string = ' AND emp_dept='''||V_EMP_DEPT||''' WITH UR';
ELSE
    SET p_query_string = ' WITH UR';
END IF;

SET p_query_string='SELECT emp_name,emp_no,emp_dept,emp_location from employee where status=1 '||p_query_string;
PREPARE S1 FROM p_query_string;
OPEN C1;
END@

String constants in the query text must be wrapped in single quotes. 查询文本中的字符串常量必须用单引号引起来。 Don't do this if emp_dept is a numeric column. 如果emp_dept是数字列,则不要执行此操作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM