#plsql
#plsql
Вопрос:
Когда я использовал инструкцию create with в теле процедуры plsql, я получаю сообщение об ошибке PLS-00103 столкнулся с символом create при ожидании одного из следующих действий…. Кто-нибудь может сказать мне, в чем причина и решение для этого.
Комментарии:
1. Почему вы хотите создать таблицу из PL / SQL? Обычно это нежелательное действие.
Ответ №1:
В PL / SQL вы не можете использовать инструкцию DDL напрямую. Вы можете либо
-
используйте:
EXECUTE IMMEDIATE 'CREATE ' || 'your command'
в виде строки. -
используйте системный пакет SYS.DBMS_SQL.
curs := dbms_sql.open_cursor
dbms_sql.parse ( curs, 'create ...' )
dbms_sql.execute ( curs )
dbms_sql.close_cursor ( curs )
-
используйте SYS.DBMS_DDL, если вы хотите создать обернутую процедуру.
Комментарии:
1. и, возможно, измените привилегии на authid current_user
2. Когда я пытаюсь получить доступ к временной таблице, я получаю сообщение об ошибке, в котором говорится, что таблица не существует. Очевидно, что это правильно, потому что таблица еще не была создана. Она будет присутствовать во время выполнения, но есть ли какой-либо способ заставить функцию тем временем скомпилироваться?
3. @Stopher87 Я так понимаю, у вас есть часть pl / sql, которая создает таблицу и добавляет несколько строк внутрь. Ответ «нет». Однако что вы можете сделать, так это продолжать использовать динамический sql для заполнения вашей временной таблицы. Вы просто продолжаете использовать инструкцию, такую как execute immediate ‘вставить в tmptab (col1, … coln) значения (val1, … valn)’ и т.д. И т.п…
4. Я вижу. Лучшим решением в этом случае, вероятно, было бы просто создать таблицу и вызвать ее «something_temp_table» вне функции и очистить ее в начале, чтобы она была чистой в использовании. Таким образом, вы можете A, скомпилировать код чисто, и B, не беспокоиться о существовании таблицы.