Sql db2动态游标声明

Sql db2动态游标声明,sql,plsql,db2,Sql,Plsql,Db2,我试图创建一个存储过程,但我得到了这个错误 预期的令牌可能包括:“”。行号=17。SQLSTATE=42601 我的代码: 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_NA

我试图创建一个存储过程,但我得到了这个错误

预期的令牌可能包括:“”。行号=17。SQLSTATE=42601

我的代码:

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@

应成功执行

声明和语句不能以任意顺序在

游标声明必须在变量声明之后,并且必须在SQL过程语句之后

因此,将游标声明放在变量声明之后

此外,代码中还有许多其他错误。应该是这样的:

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@

查询文本中的字符串常量必须用单引号括起来。如果
emp\u dept
是一个数字列,则不要执行此操作。

声明和语句不能以任意顺序在

游标声明必须在变量声明之后,并且必须在SQL过程语句之后

因此,将游标声明放在变量声明之后

此外,代码中还有许多其他错误。应该是这样的:

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@
查询文本中的字符串常量必须用单引号括起来。如果
emp\u dept
是数字列,则不要执行此操作