Make SQL*Plus script quit

跟風遠走 提交于 2021-02-15 07:08:14

问题


I have a few SQL*Plus scripts in a directory that I would like to run automatically using powershell. I can read the directory and but when I tried to execute the script, the scripts terminated but did not quit powershell and go to the next one.

How do I make powershell quit SQL*Plus and go to the next script automatically without me modifying the scripts by explicitly adding a quit at the end of each script?

Below is the illustrated powershell script in its simplest form

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

The directory can theoretically contain hundreds of scripts and it is not feasible to add quit command in each script. I would like to force SQL*Plus to quit after completing each script and move on to the next one.

Is it possible to do that?


回答1:


You can pipe the word exit into the SQL*Plus command line. For example, if demo.sql consists of this:

prompt This is my demo script

Then you can call it like this:

echo exit | sqlplus william/w @demo.sql

Output:

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>

Or using the -s (silent) option to suppress banners etc:

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

This is my demo script

Y:\SQL>

Tested with SQL*Plus 12.2 on Windows 10.

(From https://serverfault.com/q/87035/352734 - turns out it works in both Windows and Linux.)

You could also look at options for avoiding handling usernames and passwords e.g. here: https://dba.stackexchange.com/a/109170/103604




回答2:


I'm not familiar plsql but I gather that sqlplus is an exe that executes plsql scripts. If PowerShell is not continuing to the next script it is because sqlplus is not exiting. A little googling suggests that the proper way to end a pssql script is to put a single forward slash on the last line:

/

From what I understand this tells sqlplus to execute everything above, without it sqlplus will not terminate.

You say:

it is not feasible to add quit command in each script

But as far as I can tell that is exactly what you have to do.

Luckily PowerShell can help with that too. Just navigate to the directory containing the scripts and execute the following:

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


来源:https://stackoverflow.com/questions/54153384/make-sqlplus-script-quit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!