2014-10-14 6 views
0

В настоящее время я экспериментирую с хранимыми процедурами, и я пытаюсь реализовать простую инструкцию IF/ELSE. Я использую DB2, и я пытаюсь выбрать все записи, если параметр процедуры имеет значение null, а если параметр не равен null, запросите базу данных.Оператор DB2 хранимой процедуры IF

Мой код хранимой процедуры заключается в следующем:

DROP PROCEDURE [email protected] 
CREATE PROCEDURE LWILSON.IFQUERY 
(
    IN p_type VARCHAR(15) 
) 

DYNAMIC RESULT SETS 1 
LANGUAGE SQL 
BEGIN 
DECLARE c_result CURSOR WITH RETURN FOR 
IF p_type IS NULL 
THEN 
SELECT * FROM LWILSON."ANIMALS"; 
OPEN c_result; 
ELSE 
SELECT ID,TYPE,NAME,WEIGHT, AGE FROM LWILSON."ANIMALS" AS ANIMALRESULTS WHERE ANIMALRESULTS.type = p_type; 
OPEN c_result; 
END IF; 
[email protected] 

(я использую символ @ для команды разделителя). Сообщение об ошибке, которое я получаю при попытке выполнить процедуру, является следующим: Error message

Любая помощь приветствуется. Благодарю.

+0

Не думайте, что вы можете использовать 'if .. else' с таким определением Cursor. – Rahul

+0

Вам нужно объявить два курсора и открыть один или другой. – mustaccio

+0

Я попытался объявить еще один курсор ниже указанного. Затем я открыл соответствующий курсор, и он все еще не работает. Любые другие предложения? Благодарю. – LiamWilson94

ответ

1

Вы можете сделать это, подготовив инструкцию к выполнению. В этом случае вам не нужны два курсора:

CREATE OR REPLACE PROCEDURE LWILSON.IFQUERY (
    IN p_type VARCHAR(15) 
) 
    DYNAMIC RESULT SETS 1 
    LANGUAGE SQL 
BEGIN 
    DECLARE STMT VARCHAR(120); 
    DECLARE c_result CURSOR 
    WITH RETURN FOR RES_SET; 

    IF (p_type IS NULL) THEN 
    SET STMT = "SELECT * FROM LWILSON.ANIMALS"; 
    ELSE 
    SET STMT = "SELECT ID, TYPE, NAME, WEIGHT, AGE " 
    || "FROM LWILSON.ANIMALS AS ANIMALRESULTS " 
    || "WHERE ANIMALRESULTS.type = " || p_type; 
    END IF; 
    PREPARE RES_SET FROM STMT 
    OPEN c_result; 
[email protected] 
+0

Спасибо, это, кажется, имеет больше смысла. Однако я получаю следующую ошибку. DB2 SQL Error: SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = p_type, ON.IF.QUERY (IN ;, DRIVER = 3.57.110 – LiamWilson94

+0

Исправление добавляет escape-символы вокруг вводимого параметра .... В DB2 для получения одной цитаты внутри строки вам нужно использовать двойные кавычки '' – LiamWilson94

+0

. Вы не указали версию DB2. DB2 for LUW поддерживает это с версии 9.7: http://www-01.ibm.com/support/ knowledgecenter/SSEPGG_10.5.0/com.ibm.db2.luw.sql.ref.doc/DOC/r0008329.html? ср = SSEPGG_10.5.0% 2F2-12-7-90 – AngocA

Смежные вопросы