8

我正在尝试使用 sql*plus 来控制一个小的 Windows 命令脚本。

基本上,我想执行一些 PL/SQL(可能从视图或表中选择或执行一个函数),它向我显示数据库中某些行的状态,然后根据行的状态,执行一些 Windows 命令。

我的问题是如何将结果返回到命令脚本中。

sqlplus user/password@server @script.sql

IF <CONDITIONAL HERE BASED on script.sql results> GOTO :runprocess

REM log and email that process had to be skipped
EXIT

:runprocess
REM run various Windows service commands
4

6 回答 6

7

我可能会从被调用者script.sql本身编写脚本(或条件,取决于要求)。

例如,以下script.sql创建一个.bat 文件 windows_commands.bat

set feedback off
set echo off
set trimspool on
set termout off
set serveroutput on size 100000 format wrapped
set lines 500
set pages 0

-- create the bat file to be executed later:
spool windows_commands.bat

declare
  c number;
begin

  select count(*) into c from dual;

  -- depending on a conditional, write the stuff to be executed into the
  -- bat file (windows_commands.bat)
  if c = 1 then
     dbms_output.put_line('@echo everthing ok with dual');
  else
     dbms_output.put_line('@echo something terribly wrong with dual');
  end if;

end;
/

spool off

exit

然后,您可以script.sql从另一个.bat 文件中调用,如下所示:

@rem create oracle session, call script.sql
sqlplus %user%/%password%@%db% @script.sql

@rem script.sql has created windows_commands.bat.
@rem call this newly created bat file:
call windows_commands.bat
于 2012-05-08T07:15:19.227 回答
5

这就是我最终使用的。

我的 .cmd 脚本:

@ECHO OFF
ECHO Checking Oracle...

for /f %%i in ('sqlplus -s user/password@database @script.sql') do @set count=%%i
echo %count%

IF %count% GTR 0 GOTO :skipped
GOTO :runprocess

其中script.sql:

SELECT COUNT(*)
FROM table
WHERE criteria = 1;

exit
于 2012-07-24T21:43:38.420 回答
3

我强烈建议您不要使用 .bat 文件。您还有很多其他选择:C/C++ 或 VB、Windows 脚本Powershell,甚至是PerlBash等免费下载。

但这里有一个在 .bat 文件中返回错误代码的示例:

但是请看我上面给出的一些链接。避免使用 .bat 文件会让您更轻松,并且更容易在未来维护。

恕我直言 ...

于 2012-05-07T16:25:12.167 回答
2

我通过创建一个 .bat 文件来执行类似的操作,该文件执行 Windows 工作并根据需要调用 sql 脚本。使用 SQL 将您的结果后台打印到您可以阅读的文本文件中。

...这里的dos命令

sqlplus /nolog @C:\Dump\DropRecreateUsers.sql

sqlplus /nolog @C:\Dump\Cleanup.sql

...dos 命令

在 sql 中使用此命令 spool C:\yourResults.txt 或更复杂的用法创建一个过程,该过程在调用时使用 UTL_FILE 将结果写入文本文件

于 2012-05-07T16:20:43.960 回答
1

我鼓励您查看 Oracle XE 中包含的两个用于备份和恢复的脚本。这些脚本教会了我很多如何在 Windows 平台上处理批处理脚本和 Oracle。

  • C:\oracle\app\oracle\product\11.2.0\server\bin\Backup.bat
  • C:\oracleexe\app\oracle\product\11.2.0\server\bin\Restore.bat
于 2012-05-08T06:55:54.833 回答
0

连接到:Oracle 数据库 11g 企业版版本 11.2.0.1.0 - 64 位生产,具有分区、OLAP、数据挖掘和真正的应用程序测试选项

SQL> @f:\testa.txt
于 2015-11-24T09:13:14.117 回答