Skip to content Skip to sidebar Skip to footer

Function With Different Returns Db2

Hi I have this function: CREATE or replace FUNCTION Tablereturn (SWITCHER INTEGER) RETURNS TABLE (Test CHAR(9), tester INTEGER ) LANGUAGE SQL CO

Solution 1:

RETURN statement must be the last statement of the function. There is a class of functions called 'pipelined' where you can use 'if then else' logic. Like this:

CREATEOR REPLACE FUNCTION TEST_PIPELINED(P_CHOICE INT)
RETURNSTABLE (R_COL1 VARCHAR(128), R_COL2 VARCHAR(128))
BEGINDECLARESQLSTATECHAR(5);
  DECLARE L_COL1 VARCHAR(128);
  DECLARE L_COL2 VARCHAR(128);
  DECLARE c1 CURSORFOR S1;

  IF P_CHOICE=1THENPREPARE S1 FROM'SELECT COLNAME, COLNO FROM SYSCAT.COLUMNS FETCH FIRST 10 ROWS ONLY';
  ELSEPREPARE S1 FROM'SELECT TABNAME, OWNER   FROM SYSCAT.TABLES  FETCH FIRST 10 ROWS ONLY';
  END IF;

  OPEN c1;
  L1: LOOP
    FETCH c1 INTO L_COL1, L_COL2;
    IF SQLSTATE<>'00000'THEN LEAVE L1; END IF;
    PIPE(L_COL1, L_COL2);
  END LOOP L1;
  CLOSE c1;
  RETURN;
END@

Solution 2:

An alternative to using PIPE would be something simple like this

CREATEOR REPLACE FUNCTION TEST_CHOICE(P_CHOICE INT)
RETURNSTABLE (R_COL1 VARCHAR(128), R_COL2 VARCHAR(128))
RETURNSELECT COLNAME, TYPENAME FROM SYSCAT.COLUMNS WHERE P_CHOICE =1UNIONALLSELECT TABNAME, OWNER     FROM SYSCAT.TABLES WHERE P_CHOICE =2
;

Post a Comment for "Function With Different Returns Db2"