Заставить SQL * Plus скрипт выйти - PullRequest
0 голосов
/ 11 января 2019

У меня есть несколько сценариев SQL * Plus в каталоге, которые я хотел бы запускать автоматически с помощью powershell. Я могу прочитать каталог, но когда я попытался выполнить сценарий, сценарии завершились, но не вышли из powershell и не переходили к следующему.

Как заставить PowerShell выйти из SQL * Plus и автоматически перейти к следующему сценарию, не меняя сценарии путем явного добавления выхода в конце каждого сценария?

Ниже приведен иллюстрированный скрипт powershell в его самой простой форме

$Filename=Get-childitem "D:\test\TestSQL" -Filter *.sql | Select -ExpandProperty name
foreach ($f in $Filename)
{
  sqlplus -L -S <username>/<password>@<sid> @$f
}

Теоретически каталог может содержать сотни сценариев, и невозможно добавить команду выхода в каждый сценарий. Я хотел бы заставить SQL * Plus завершать работу после завершения каждого сценария и переходить к следующему.

Возможно ли это сделать?

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Вы можете передать слово exit в командную строку SQL * Plus. Например, если demo.sql состоит из этого:

prompt This is my demo script

Тогда вы можете назвать это так:

echo exit | sqlplus william/w @demo.sql

Выход:

Y:\SQL>echo exit | sqlplus william/w @demo.sql

SQL*Plus: Release 12.2.0.1.0 Production on Sun Jan 13 10:47:13 2019

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

Last Successful login time: Sun Jan 13 2019 10:46:03 +00:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production


This is my demo script
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

Y:\SQL>

Или используя опцию -s (без вывода сообщений) для подавления баннеров и т. Д .:

Y:\SQL>echo exit | sqlplus -s william/w @demo.sql

This is my demo script

Y:\SQL>

Протестировано с SQL * Plus 12.2 в Windows 10.

https://serverfault.com/q/87035/352734 - выясняется, что он работает как в Windows, так и в Linux.)

Вы также можете посмотреть варианты, чтобы избежать обработки имен пользователей и паролей, например. здесь: https://dba.stackexchange.com/a/109170/103604

0 голосов
/ 12 января 2019

Я не знаком с plsql, но я понимаю, что sqlplus - это исполняемый файл, выполняющий сценарии plsql. Если PowerShell не переходит к следующему сценарию, это происходит потому, что sqlplus не завершается. Небольшой поиск в Google позволяет предположить, что правильный способ завершить сценарий pssql - поставить одну косую черту в последней строке:

/

Из того, что я понимаю, это говорит sqlplus выполнить все вышеперечисленное, без этого sqlplus не прекратит работу.

Вы говорите:

невозможно добавить команду выхода в каждом скрипте

Но, насколько я могу судить, это именно то, что вы должны сделать.

К счастью, PowerShell может помочь с этим тоже. Просто перейдите в каталог, содержащий скрипты, и выполните следующее:

dir *.sql | add-content -value "/"
...