Как получить dbms_output.put_line в результате процедуры сохранения с помощью оболочки Unix Korn - PullRequest
0 голосов
/ 04 июля 2018

Пожалуйста, обратитесь к моему образцу, В Oracle DB они ниже SP

CREATE OR REPLACE PROCEDURE SP_TEST_PUTLINE AS 
BEGIN
DBMS_OUTPUT.ENABLE;
  dbms_output.put_line('Hello world!');
END SP_TEST_PUTLINE;

Я использую оболочку Unix для вызова SP, чтобы получить dbms_output.put_line('Hello world!') от SP, как мне это сделать. Я использую команду sqlplus для входа в БД, кажется, не могу получить желаемый результат.

   output=$(IFS='';echo connect ${DBUSER}/${DBPASS}@${ORACLE_SID} execute SP_TEST_PUTLINE|sqlplus -s /nolog )

Кто-нибудь может мне помочь? Заранее спасибо ...

------------------------------------ разделительная линия 20180705 -------- -----------------------------

Спасибо за помощь Алексу и Каушику Наяку, очень помогли.

ниже приведены некоторые выводы для Каушика Наяка, см.

Привет Каушик, работает, но сначала не получилось с ошибкой ниже

unknown command beginning "-e connect..." - rest of line ignored. SP2-0734: 

Так что я меняю опцию echo -e на echo, тогда она работает. Итак, вот вопросы 1) почему я использую опцию echo без -e, результат может быть ниже, это вызвано IFS?

echo "abc\n def \nghi" 
abc
 def 
ghi

2) согласно комментариям Алекса, где два варианта нужно записать их в две строки? но вы не использовали \ n между ними

 set serveroutput on
set feedback off

и когда я добавляю \ n между ними, как показано ниже, он допускает ошибку, как показано ниже, но "мир hellow!" имеет выход

SP2-0734: unknown command beginning "feedback o..." - rest of line ignored. Hello world! PL/SQL procedure successfully completed. 

вот вопрос, почему вы не использовали \ n между включенным выходом сервера и отключенной обратной связью, эта команда БД (отключенная обратная связь) была выполнена успешно?

С нетерпением ждем вашего ответа. заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 04 июля 2018

Если вы используете однострочное эхо для передачи в sqlplus, вы должны поставить новые строки, используя параметр -e echo

output=$(IFS='';echo -e "connect  ${DBUSER}/${DBPASS}@${ORACLE_SID}\nset serveroutput on feedback off\n execute SP_TEST_PUTLINE" |sqlplus -s /nolog )

Вы также должны указать set serveroutput on и feedback off, чтобы увидеть только вывод.

Таким образом, лучшим вариантом будет использование документа здесь, на который указал Алекс.

0 голосов
/ 04 июля 2018

Команде, которую вы используете, не удастся даже соединиться, потому что вам нужен разрыв строки между connect и execute.

Но вам также нужно set serveroutput on, и вы, вероятно, тоже хотите set feedback off (и, возможно, другие варианты.

Я бы использовал наследственный , чтобы было легче читать и поддерживать:

output=$(
sqlplus -s /nolog <<!EOF
connect ${DBUSER}/${DBPASS}@${ORACLE_SID}
set serveroutput on
set feedback off
execute SP_TEST_PUTLINE
!EOF
)

# then do whatever you want with the output
echo ${output}

Возможно, вы захотите проверить ошибки ...

...