объявление динамического курсора db2 - PullRequest
0 голосов
/ 08 января 2019

Я пытаюсь создать хранимую процедуру, но получаю эту ошибку

Ожидаемые токены могут включать: «». НОМЕР ЛИНИИ = 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@

должно быть успешно выполнено

1 Ответ

0 голосов
/ 08 января 2019

Объявления и операторы не могут следовать в произвольном порядке в Составной SQL (скомпилированный) оператор

Объявления курсора должны следовать за объявлениями переменных и должны сопровождаться операторами процедуры 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_dept является числовым столбцом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...