У меня есть этот источник здесь:
CREATE OR REPLACE FUNCTION SWITCHTEST (CHOICE VARCHAR(10))
RETURNS TABLE ( R_COL1 VARCHAR(1024) ,R_COL2 VARCHAR(1024) )
LANGUAGE SQL
MODIFIES SQL DATA
BEGIN
DECLARE SQLSTATE CHAR(5);
DECLARE SELECT1 VARCHAR(1024);
DECLARE L_COL1 VARCHAR(1024);
DECLARE L_COL2 VARCHAR(1024);
SET SELECT1 = 'SELECT TEST, DESCR FROM TESTTAB FETCH FIRST 10 ROWS ONLY';
SET SELECT2 = 'SELECT DESCR, COLOUR FROM TESTTAB FETCH FIRST 10 ROWS ONLY';
IF CHOICE = 'FIRST' THEN
PREPARE S1 FROM SELECT1;
ELSEIF CHOICE = 'SECOND' THEN
PREPARE S1 FROM SELECT2;
ELSE
END IF;
RETURN EXEC(S1);
END@
Называя это как
SELECT * FROM TABLE (SWITCHTEST('FIRST')) @
Он должен просто выполнить SQL в подготовленном операторе S1, и я не хочу использовать цикл в функции.
Я использую DB2 Windows 10.5
Есть идеи, как это исправить?
Я знаю, что EXEC (S1) не так, но я не могу найти на странице IBM ничего, что показывало бы, как заставить это работать.
Спасибо за вашу помощь.
Viking