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