Выполнение динамического запроса DB2, который возвращает количество строк

Здесь я пытаюсь запустить динамический запрос в DB2, который возвращает количество строк в переменной.

Может ли кто-нибудь помочь мне, как сохранить результат динамического запроса в переменную, чтобы я мог использовать его дальше? Ниже приведен фрагмент кода: --

CREATE PROCEDURE SP_REC_COUNT ( )
  LANGUAGE SQL
  NOT DETERMINISTIC
  EXTERNAL ACTION
  MODIFIES SQL DATA
  CALLED ON NULL INPUT
  INHERIT SPECIAL REGISTERS
BEGIN
DECLARE SQL_STR VARCHAR(5000);
DECLARE V_TabSchema VARCHAR(50);
DECLARE V_TabName VARCHAR(100);
DECLARE CNT INTEGER DEFAULT 0;
DECLARE CountCur CURSOR FOR select TabSchema,TabName from SysCat.Tables where TabSchema='NGCORE' or TabSchema='NGCOREAU';
    OPEN CountCur;
        CountCur_Loop1:LOOP
        FETCH CountCur INTO  V_TabSchema,V_TabName;
        IF SQLCODE = 0
        THEN
          SET  SQL_STR ='select count(*) into CNT  from '|| V_TabSchema||'.'||V_TabName;
            PREPARE SQ FROM SQL_STR;
            execute  SQ;
            SET  SQL_STR ='INSERT INTO NGCORE_TMP.PHYISICAL_BACKOUT_REC_CNT(SCHEMA_NM,TABLE_NM,BEFORE_CNT)VALUES('''||V_TabSchema||''','''||V_TabName||''','||CNT||')';         
            PREPARE SQL FROM SQL_STR;
            EXECUTE SQL;
        ELSE
            CLOSE CountCur;
            LEAVE CountCur_Loop1;
        END If;
        END LOOP CountCur_Loop1;

END;

Получение следующей ошибки: - ОШИБКА [42703] [IBM][DB2/AIX64] SQL0206N "CNT" недействительна в контексте, где она используется. SQLSTATE=42703


person Pravin Dwiwedi    schedule 05.07.2012    source источник


Ответы (1)


Я думаю, вам нужно сначала выпустить PREPARE с предложением OUTPUT, а затем EXECUTE с оператором INTO.

Кажется, я не могу найти пример в документации IBM.

person Preet Sangha    schedule 05.07.2012
comment
Отлично @Pravin - пожалуйста, отредактируйте мой ответ или добавьте свой собственный с решением для дальнейшего использования - спасибо. - person Preet Sangha; 05.07.2012