Буферный вывод в SQL* Plus с несколькими параметрами - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь запустить. sql с SQL* Plus, используя скрипт Powershell. По какой-то причине сценарий не генерирует вывод, когда я использую второй параметр в командной строке. Это работает, когда я использую только один. Кто-нибудь может сказать мне, что я делаю не так?

Строка Powershell, которую я использую для запуска sqlplus, выглядит следующим образом:

    Run-LocalProcess SQLPLUS "${USER/PASS} @${SQLPATH}\something.sql ${1STPARAMETER} ${2NDPARAMETER}"

Где LocalProcess - это функция, которую мы используем для запуска процессов в CLI. Первый параметр - это путь к файлу буферизованного вывода без символа \ на конце. Второй параметр - это число, которое мы пытаемся добавить к имени файла буферизованного вывода.

. sql, который мы используем, выглядит следующим образом:

    set heading off
    set pause off
    set verify off
    set termout off
    set trimspool on
    set feedback off
    set linesize 500 
    set pagesize 0
    set escape ^

column sys_date heading "SystemDate" new_value sys_date format a20;

select  to_char(sysdate,'YYYYMMDDHH24MISS') sys_date
from    dual;

column db_name heading "DatabaseName" new_value db_name format a12;

select  d.name db_name
from    v$database d;

spool &1\&2something_&db_name._&sys_date..txt
SOMETHING
spool off

Причина, по которой я устанавливаю escape для ^ заключается в том, что стандартным escape-символом SQLPLUS является backsla sh.

Ответы [ 4 ]

0 голосов
/ 18 июня 2020

Вот мой пример

cat myscript.sql
set heading off
set pause off
set verify off
set termout off
set trimspool on
set feedback off
set linesize 500
set pagesize 0
set escape ^

column sys_date heading "SystemDate" new_value sys_date format a20;

select  to_char(sysdate,'YYYYMMDDHH24MISS') sys_date
from    dual;

column db_name heading "DatabaseName" new_value db_name format a12;

select  d.name db_name
from    v$database d;

spool &1.\_\&2._something_&db_name._&sys_date..txt
select * from dual;
spool off

Теперь выполняю

sqlplus -S "/ as sysdba" @myscript.sql "first" "second"

Получил

[ftpcpl@scglvdoracd0006 ~]$ ls -ltr firs*
-rw-r--r-- 1 ftpcpl dms 2 Jun 18 16:13 
first_second_something_ODCGRC1R_20200618161359.txt
[ftpcpl@scglvdoracd0006 ~]$ cat first_second_something_ODCGRC1R_20200618161359.txt
X

С уважением

0 голосов
/ 18 июня 2020

Вы должны использовать Sqlplus в тихом режиме, поэтому вы не помещаете содержимое баннера в выходной файл

Run-LocalProcess SQLPLUS -S "${USER/PASS} @${SQLPATH}\something.sql ${1STPARAMETER} ${2NDPARAMETER}"

и, как сказал @Sagi, вам нужно поставить катушку перед запросом .

0 голосов
/ 18 июня 2020

Разве второй параметр не нужно разделять? Вместо "& 2something". Разве это не должно быть «& 2. что-то»?

содержимое doit. sql:

set echo on feedback on verify on trimsp on lines 256 pages 5
Prompt Parm 1 is &1
prompt parm 2 is &2
prompt combined is &1\&2something
prompt combined delimited is &1\&2.something

Время выполнения:

SQL> @doit
SQL> set echo on feedback on verify on trimsp on lines 256 pages 5
SQL> Prompt Parm 1 is &1
Parm 1 is bob
SQL> prompt parm 2 is &2
parm 2 is carol
SQL> prompt combined is &1\&2something
Enter value for 2something: fubar
combined is bob\fubar
SQL> prompt combined delimited is &1\&2.something
combined delimited is bob\carolsomething
0 голосов
/ 18 июня 2020

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

...