SQL-запрос для сценариев PL / SQL - PullRequest
0 голосов
/ 17 сентября 2018

Я пишу процедуру PL / SQL на SQL Developer и выполняю следующий запрос:

EXECUTE IMMEDIATE 'select count(*) from '||var_Table||' into var_NumRec where COMPANY = '||var_company||' order by COMPANY';
OR
EXECUTE IMMEDIATE 'select count(*) from '||var_Table||' into '||var_NumRec||' where COMPANY = '||var_company||' order by COMPANY';

Я получаю сообщение об ошибке "Команда SQL не завершена должным образом"

запрос ниже работает нормально, но я должен добавить предложение "where" к этому запросу:

select count(*) from '||var_Table into var_NumRec;

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Я проверил процедуру и запустил приведенный ниже код, который работает нормально.

DECLARE 
    var_NumRec NUMBER(15); 
    var_Table VARCHAR2(40); 
    var_company VARCHAR2(25) := 'ABC'; 
    TYPE 
        my_nested_table 
        IS TABLE OF VARCHAR2(40); 
    var_Direct my_nested_table := my_nested_table ('Employee', 'Accounts', 'FEE'); 
BEGIN 
    FOR i IN 1.. var_direct.count 
    LOOP 
        EXECUTE IMMEDIATE 'select count(*) from '||var_Direct(1) ||' where 1=1' into var_NumRec ;  
        DBMS_OUTPUT.PUT_LINE('ABC : '||var_NumRec); 
    END LOOP;
END;

Вы используете идентификатор «Компания», который здесь недопустим, поэтому предыдущий код не выполнялся.

0 голосов
/ 17 сентября 2018

Используйте приведенный ниже запрос вместо процедуры немедленного выполнения в pl SQL:

EXECUTE IMMEDIATE 'select count(*) from '||var_Table||'  where COMPANY = '||var_company order by COMPANY  
into var_NumRec;

Когда мы используем Операцию немедленного выполнения, мы должны поместить INTO вне оператора. Надеюсь, это сработает для вас.

...