Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Передать результат PL/SQL в переменную shell  [new]
В. Татьяна
Member

Откуда:
Сообщений: 183
Есть процедура, которая возвращает строковое значение - имя экспориуемого файла dbms_output.put_line (FILE_NAME);
Как присвоить переменной shell результат выполнения процедуры?

Когда делаешь так:
echo $(sqlplus -S /nolog @$LOCAL_DIR/arch_audit.sql)
то в переменную присваевается результат + сообщение об успешном выполнении процедуры
ttt_100426_051914-100429_112155.DMP PL/SQL procedure successfully completed.

Как избавится от хвоста "PL/SQL procedure successfully completed."?
11 май 10, 09:46    [8751870]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
Elic
Member

Откуда:
Сообщений: 29988
В. Татьяна
Как избавится от хвоста "PL/SQL procedure successfully completed."?
RTFM SET FEED[BACK] (FAQ)
11 май 10, 09:49    [8751882]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18363
set feedback off?
11 май 10, 09:50    [8751884]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
В. Татьяна
Member

Откуда:
Сообщений: 183
andrey_anonymous,

спасибо, помогло.
11 май 10, 10:19    [8751999]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
В. Татьяна
Member

Откуда:
Сообщений: 183
А если, процедура выдает два результата (с заданным разделителем)? Как записать их в две разных переменных shell?
11 май 10, 10:28    [8752064]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
В. Татьяна
А если, процедура выдает два результата (с заданным разделителем)? Как записать их в две разных переменных shell?

сначала в массив, а потом массив разобрать
11 май 10, 10:29    [8752073]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
andrey_anonymous
Member

Откуда: Москва
Сообщений: 18363
В. Татьяна
А если, процедура выдает два результата

Для возврата результатов существуют функции и out-параметры процедур.
dbms_output - это скорее диагностическая печать.
11 май 10, 10:42    [8752151]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
Elic
Member

Откуда:
Сообщений: 29988
В. Татьяна
А если, процедура выдает два результата (с заданным разделителем)? Как записать их в две разных переменных shell?
gawk два раза.
11 май 10, 10:50    [8752208]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
В. Татьяна
Member

Откуда:
Сообщений: 183
Ну так как же лучше сделать? Допустим я оформлю это как функцию - и буду возвращать out параметры. Как присвоить их переменной?... Механизм присвоения все равно тот же?...
11 май 10, 10:51    [8752217]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
В. Татьяна
Ну так как же лучше сделать? Допустим я оформлю это как функцию - и буду возвращать out параметры. Как присвоить их переменной?... Механизм присвоения все равно тот же?...



bash-2.05$ dfl=(`$ORACLE_HOME/bin/sqlplus -S '/as sysdba' << EOF
> set heading off feedback off termout off trimspool on
> SELECT name from v\\$datafile;
> EOF`)

bash-2.05$ echo ${dfl[0]}
/oradata/xxx/datafile/o1_mf_system_5x0627f7_.dbf

bash-2.05$ echo  ${dfl[1]}
/oradata/xxx/datafile/o1_mf_sysaux_5x0627y2_.dbf

bash-2.05$ sqlplus "/as sysdba"

SQL*Plus: Release 11.1.0.7.0 - Production on Tue May 11 09:35:22 2010

Copyright (c) 1982, 2008, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------
/oradata/xxx/datafile/o1_mf_system_5x0627f7_.dbf
/oradata/xxx/datafile/o1_mf_sysaux_5x0627y2_.dbf
/oradata/xxx/datafile/o1_mf_undotbs1_5x0627yw_.dbf
/oradata/xxx/datafile/o1_mf_users_5x06285c_.dbf
/oradata/xxx/datafile/o1_mf_odirep_5x0l51rf_.dbf
/oradata/xxx/datafile/o1_mf_odiwork_5x0l5g6s_.dbf

6 rows selected.

SQL>
11 май 10, 10:55    [8752245]     Ответить | Цитировать Сообщить модератору
 Re: Передать результат PL/SQL в переменную shell  [new]
В. Татьяна
Member

Откуда:
Сообщений: 183
pravednik,

круто, спасибо :-)
11 май 10, 11:20    [8752440]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить