Ошибка неверного имени таблицы при использовании оператора Execute Immediate с переменными связывания - PullRequest
5 голосов
/ 10 марта 2011

Я пытаюсь запустить этот динамический SQL (используя EXECUTE IMMEDIATE)

M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 from :m_var2 RETURNING MAX(:m_var1)+1 INTO :m_var3';

EXECUTE IMMEDIATE M_SQL_STATEMENT
   USING M_COLUMN_NAME, UPPER(P_TABLE_NAME), M_COLUMN_NAME
   RETURNING INTO M_SEQ_NUMBER;

Однако, пытаясь запустить это, я продолжаю сталкиваться с

ORA-00903: Invalid table

P_TABLE_NAME - это имя таблицы, которое принимается в качестве ввода. Я подтвердил, что имя таблицы и имя столбца являются действительными. Я не могу понять, почему Oracle выдает ошибку.

FWIW Изменение оператора SQL на

M_SQL_STATEMENT := 'SELECT MAX(:m_var1)+1 SEQ from :m_var2 RETURNING SEQ INTO :m_var3';

по-прежнему приводит к той же ошибке.

1 Ответ

7 голосов
/ 10 марта 2011

Вам нужно поместить имя таблицы и имя столбца в динамический SQL, что-то вроде

M_SQL_STATEMENT := 'SELECT MAX(' || M_COLUMN_NAME || ')+1 from ' 
|| P_TABLE_NAME';

EXECUTE IMMEDIATE M_SQL_STATEMENT INTO M_SEQ_NUMBER;
...