Записать в Oracle параллельный запрос / вывод из программы SQLPlus - PullRequest
0 голосов
/ 28 января 2020

У меня есть Oracle параллельный запрос, который вызывает программу SQLPlus. Сама программа работает правильно, но я хотел бы добавить некоторую информацию о регистрации в параллельный запрос / вывод в EBS.

Я пробовал несколько вариантов:

set heading off
--set pagesize 0 embedded on
set pagesize 50000
set linesize 32767
set feedback off
set verify off
set term off
set echo off
set newpage none
set serveroutput on

dbms_output.enable(1000000);

--prepare data
EXECUTE program (&1,&2,&3,&4,&5);

--extract data
@"path/file.SQL";

fnd_file.put_line(FND_FILE.LOG,'do some logging here');
fnd_file.put_line(FND_FILE.OUTPUT,'do some logging here');

/

Но все, что я пробовал до сих пор, приводит либо к

  • , ни к каким логам не добавляется вывод запроса или протокол
  • без вывода запроса вообще
  • ошибки типа: SP2-0734: unknown command beginning "dbms_outpu..." - rest of line ignored. и PLS-00103: Encountered the symbol "ENABLE" when expecting one of the following: := . ( @ % ;

Можно ли записать в вывод запроса или войти из Сценарий SQLPlus, который вызывается из параллельного менеджера?

Ответы [ 3 ]

2 голосов
/ 28 января 2020

Прежде всего, ваш скрипт SQL* Plus даже не запускается без ваших попыток входа в систему.

  1. dbms_output enable(...) отсутствует точка ('.').
  2. Ваш анонимный блок PL / SQL не имеет end; оператора
  3. @ "path / file.SQL` - это команда SQL* Plus - ее нельзя внедрить в анонимный PL / * Блок 1038 *.

Помимо этих основных проблем c, FND_FILE.PUT_LINE предназначен только для параллельных программ PL / SQL, то есть параллельных программ, исполняемые программы которых указывают на PL / * 1041. * пакетная процедура и не a. sql файл в $ APPL_TOP.

Для SQL* Plus одновременно работающих программ, т. е. запуск файла. sql в $ APPL_TOP, FND_FILE.PUT_LINE не работает. Вместо этого ваш вывод SQL* Plus автоматически записывается в вывод запроса. Не существует стандартного способа записи в журнал запросов.

Если вы действительно необходимо записать в журнал запросов, вы можете, возможно, позвонить FND_FILE.PUT_NAMES, чтобы FND_FILE.PUT_LINE записать во временные файлы, которые вы называете. Затем, зная текущий идентификатор запроса и logi c Oracle, которые EBS использует для локальных файлов вывода и журналов, выполните команды FND_FILE.CLOSE и host для перемещения файлов с именами, указанными вами, в фактические расположения. Это может работать.

Было бы намного лучше переделать вашу параллельную программу как пакет PL / SQL. Тогда FND_FILE работает просто отлично. Если вы знаете, как вызывать Java из базы данных, вы очень мало можете сделать в сценарии. sql, чего нельзя сделать в пакете PL / SQL.

Я не написал a. sql параллельная программа в годах, и я пишу параллельные программы все время.

0 голосов
/ 31 января 2020

Я решил эту проблему. Решение невероятно простое - и теперь я не в форме, потому что это заняло так много времени.

Шаг 1 - SET ECHO ON

Шаг 2 - PROMPT whatever you want written to concurrent request output

Следующий пример записывает 'Output is written to this folder 'в вывод параллельного запроса.

set heading off
--set pagesize 0 embedded on
set pagesize 50000
set linesize 32767
set feedback off
set verify off
set term off
set echo on
set newpage none
set serveroutput on

prompt Output is written to this folder

--prepare data
EXECUTE program (&1,&2,&3,&4,&5);

--extract data
@"path/file.SQL";

/

Это именно то, что я искал. Может быть, это будет полезно кому-то в другой галактике.

0 голосов
/ 30 января 2020

Как упоминал Мэтью, вход в SQL* Plus исполняемых файлов работает плохо. Если по какой-то причине вы не можете переместить свой код в хранимую процедуру PL / SQL, вместо вас может подойти скрипт Host. Оттуда вы можете выполнить SQL, например, sqlplus -s $ FCP_LOGIN ... и, при необходимости, записать информацию журнала. Если вам просто нужно подготовить данные по PL SQL, а затем передать их в CSV с помощью SQL, вы можете вместо этого использовать Blitz Report нашей компании, что делает это более удобным и бесплатным для такого использования. Он также использует исполняемый файл типа Host и оттуда вызывает sqlplus.

...