Я получил сообщение «PLS-00103: обнаружен символ« CREATE »...» при попытке объявить каталог в хранимой процедуре ». - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь создать текстовый файл, используя «PL / SQL» с «utl_file», но у меня возникли некоторые проблемы. Вот мой код

procedure testFile Is
  out_File Utl_File.File_Type;
  CREATE OR REPLACE DIRECTORY tmp AS 'C:\Users\jsnow\Documents';

  GRANT read, write ON DIRECTORY tmp TO jack;
Begin
  out_file:=utl_file.fopen(tmp,'test.txt','W');
  utl_file.put_line(out_file,'Test!');
  utl_file.fclose(out_file);
  Exception when others then
    Dbms_output.put_line(sqlerrm ||'-------'||Sqlcode);
end testfile;

Когда я пытаюсь скомпилировать этот скрипт, я получаю эту ошибку:

PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

          begin function pragma procedure subtype type <an identifier>
          <a double-quoted delimited-identifier> current cursor delete
          exists prior

Знаете ли вы, как я могу создать текстовый файл в хранимой процедуре? Заранее спасибо.

1 Ответ

1 голос
/ 24 февраля 2020

Прежде всего, вы не должны делать это в процедуре. Создайте каталог (и предоставьте привилегии) ​​из него на уровне SQL (не PL / SQL).

Если вы настаиваете, вам придется использовать Dynami c SQL, то есть execute immediate:

procedure testFile Is
  out_File Utl_File.File_Type;
Begin
  execute immediate q'[CREATE OR REPLACE DIRECTORY tmp AS 'C:\Users\jsnow\Documents']';
  execute immediate 'GRANT read, write ON DIRECTORY tmp TO jack';

  -- the rest of your code
end;
...