如何通过批处理文件连接到 SQL Plus 来运行 SQL 查询

Posted

技术标签:

【中文标题】如何通过批处理文件连接到 SQL Plus 来运行 SQL 查询【英文标题】:How to run a SQL query by connecting to SQL Plus through Batch file 【发布时间】:2020-10-28 17:25:02 【问题描述】:

我需要通过批处理文件连接到 SQL Plus 来运行 SQL 查询。

因此,我在记事本中创建了一个批处理文件“test.bat”并编写了以下内容:-

@echo off
set /p uname=Enter SQLPlus username:
set /p pwd=Enter SQLPlus password with instance:

sqlplus %uname%/%pwd%
select table_name from all tables 
order by table_name;
pause

当我运行批处理文件时,我能够登录到 SQLplus,但在 cmd 中它会打印 SQL>

而且我需要手动输入选择命令。

如何让 select 语句自动运行?

【问题讨论】:

检查this、this和this 尝试了那里所述的命令,但仍然无法正常工作 【参考方案1】:

您可以将您的 SELECT 语句放在另一个文件中,SQL*Plus 将使用 @ 符号调用该文件:

c:\> type test.sql
select sysdate from dual;
exit

c:\> type test.bat
@echo off
set /p uname=Enter SQLPlus username:
set /p pwd=Enter SQLPlus password with instance:
sqlplus -s %uname%/%pwd% @test.sql

C:\> test.bat
Enter SQLPlus username: MYUSER
Enter SQLPlus password with instance: MYPWD

SYSDATE
-------------------
2020-10-28 19:59:46

如果无法创建单独的 .SQL 文件,您可以尝试以下操作:

echo select sysdate from dual; | sqlplus -s %uname%/%pwd%

【讨论】:

谢谢,@Marco 但是由于一些限制,我不能使用单独的 SQL 文件 @AmarKumar 我已经扩展了我的答案 它仍然提示我 SQL> 而且 SQL 命令没有运行【参考方案2】:

有办法做到这一点

将代码括在括号中 echo-ing 括号内的每一行 并且 - 如有必要(如在我的示例中) - 使用 3 个 ^ 符号转义 <。 最后,管道到 SQL*Plus

看起来有点愚蠢,但它确实有效。方法如下。

p1.bat 脚本:

@echo off
set /p uname=Enter SQLPlus username:
set /p pwd=Enter SQLPlus password with instance:

(
echo select table_name 
echo from user_tables 
echo where rownum ^^^<= 5 
echo order by table_name;
) | sqlplus %uname%/%pwd% 

测试:

c:\Temp>p1
Enter SQLPlus username:scott
Enter SQLPlus password with instance:tiger

SQL*Plus: Release 11.2.0.2.0 Production on Sri Lis 28 21:45:34 2020

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


Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

SQL>   2    3    4
TABLE_NAME
------------------------------
BONUS
DEPT
EMP
LINKS
SALGRADE

SQL> Disconnected from Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

c:\Temp>

在我看来,单独的.SQL 文件更简单。看看你是否可以避免你提到的那个“限制”。

【讨论】:

嗨,@Littlefoot 实际上我不能使用单独的 .SQL 文件,因为在批处理文件的不同部分运行多个 SQL 查询,而且我对创建新文件夹和任何可避免的文件有一些限制也是。 好的,然后使用我的建议。

以上是关于如何通过批处理文件连接到 SQL Plus 来运行 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

连接到Oracle的几种命名方式

从 Table Plus 连接到我的本地 docker 数据库实例

最喜欢的 SQL*Plus 提示和技巧 [关闭]

PL/SQL 如何查看当前连接信息以及SQL PLUS如何指定IP地址

LinuxCentOS中使用SQL*Plus启动和关闭数据库

SQL*PLUS中批量执行SQL语句