Возвращаемое значение из PL / SQL - PullRequest
0 голосов
/ 07 октября 2018

Итак, у нас есть сценарий оболочки, который должен вызвать анонимный блок и получить значение обратно.Анонимный блок составляет около 100 строк, поэтому он у нас есть в файле, поэтому для SQL * Plus он называется:

@/directory_path/anonymous_block "'param1'" "'param2'"

Да, мы передаем пару параметров.И в конце этого у нас есть DBMS_OUTPUT.PUT_LINE.......

Итак, у нас есть вопрос, как вернуть это в Shell?Мы пробовали различные типы кода, подобные этому:

proc=TEMPLATE1_MV<BR>
code=513

x=`print "
  set heading off feedback off verify off timing off
  @/u01/sql/stock_rpt_stats '$code' '$proc';
  exit" | sqlplus -s $user/$pass`

y=`echo $x | awk '{print $1}'`<BR>
printf "HERE: $y\n"

Но не повезло, только ошибки.

Если это содержит только прямой SQL:

SELECT TRUNC(SYSDATE) FROM dual;

Это будет работать нормально, но без ссылки на файл, содержащий SQL.

Любой, у кого есть идеи, был бы великолепен.Заранее спасибо.

1 Ответ

0 голосов
/ 07 октября 2018

Вы пытались добавить SET SERVEROUTPUT ON?

Я обычно предпочитаю запускать sqlplus с использованием метода heredoc и передавать результат блока в переменную, подобную этой, и она прекрасно работает для меня.

scripts-$cat ./sqlplus_exec.sh
#!/bin/bash
output=$(sqlplus -s  $user/$pass <<INP
set heading off feedback off verify off timing off
set serveroutput on
@print_output.sql
INP
)

echo "$output"

Вот файл SQL

scripts-$cat print_output.sql
BEGIN
  DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
END;
/

scripts-$./sqlplus_exec.sh
HELLO WORLD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...