Как включить переменную в инструкцию execute immediate?

#plsql #oracle12c

#plsql #oracle12c

Вопрос:

Я пытаюсь выбрать переменную в инструкции execute immediate, однако я не уверен в синтаксисе.

Код, который я пытаюсь запустить, выглядит примерно так:

 DECLARE
PREV_PAR VARCHAR2(1);
VC_NUM VARCHAR2(2);
BEGIN
SELECT 'P' INTO PREV_PAR FROM DUAL;
SELECT '01' INTO VC_NUM FROM DUAL;
EXECUTE IMMEDIATE 'CREATE TABLE TEMP_TABLE AS (SELECT '||PREV_PAR||' as prev_par,'||VC_NUM||'  as vc_code from dual)';
END;
 

Что я делаю неправильно?

Ответ №1:

Вам нужно добавить еще два знака кавычек, чтобы окружить каждую из ваших переменных varchar, как показано ниже.

 DECLARE
PREV_PAR VARCHAR2(1);
VC_NUM VARCHAR2(2);
BEGIN
SELECT 'P' INTO PREV_PAR FROM DUAL;
SELECT '01' INTO VC_NUM FROM DUAL;
EXECUTE IMMEDIATE 'CREATE TABLE TEMP_TABLE AS (SELECT '''||PREV_PAR||''' as prev_par,'''||VC_NUM||'''  as vc_code from dual)';
END;
/
 

Потому что последняя инструкция во время выполнения должна быть такой :

 CREATE TABLE TEMP_TABLE AS (SELECT 'P' as prev_par, '01'  as vc_code from dual)
 

Комментарии:

1. Спасибо за вашу помощь.