【问题标题】:Running SQL scripts as windows batch file将 SQL 脚本作为 Windows 批处理文件运行
【发布时间】:2019-02-23 11:25:21
【问题描述】:

我正在使用 Oracle 11g 并且有一个 Oracle SQL 查询(不是 SQL+),如下所示

spool E:\teST\log.txt

select username,account_status, created, default_tablespace 
from dba_users where username='MMCANE';
spool off

exit;

我打算作为 Windows 批处理文件运行,为此我创建了配置如下的 .bat 文件

sqlplus *username*/*password*@*database* @E:\teST\Untitled.sql

Untitled.sql 是正在运行的选择查询

1.我可以将它作为 SQL 而不是 SQL Plus 运行吗?

运行批处理文件会以文本文件的形式生成所需的输出,但由于我将其作为 sqlplus 运行,因此会得到一个未格式化的输出文本文件(见下文)

   USERNAME ACCOUNT_STATUS                                                            
---------- --------------------------------  
CREATED    
--------------------------------------------------------------
DEFAULT_TABLESPACE                                                                     
--------------------------------------------------------------------------------
   MMCANE OPEN                                                              
13-SEP-17
USERS

与通过在 SQL 开发人员本身中运行查询生成的脚本输出(见下文)相反

USERNAME             ACCOUNT_STATUS            CREATED                  DEFAULT_TABLESPACE             
------------------  ----------------------------- ------------------------- ----------------------- 
 MMCANE              OPEN                      13-SEP-17                 USERS  

2。有没有办法格式化?如果是这样,我应该在哪里下达命令?

我尝试在查询中指定 linesize、wrap 和其他命令,但由于我已在 Oracle SQL 中编写查询,因此无法正常工作。任何帮助将不胜感激。

谢谢。

【问题讨论】:

  • “SQL 查询(不是 SQL+)”和“将其作为 SQL 而不是作为 SQL Plus 运行”是什么意思? SQL 是一种语言,SQL*Plus 是一种客户端,您的脚本包含 SQL*Plus 命令。 (不知道为什么你也标记为 SQL Developer?)对于格式,see this。您可能还想check out SQLcl 作为替代方案。

标签: oracle oracle11g oracle-sqldeveloper


【解决方案1】:

VBA 脚本可能是要走的路吗?

dim cn, rs

set cn = CreateObject("ADODB.Connection")
set rs = CreateObject("ADODB.Recordset")
cn.connectionString = "Driver={MySQL ODBC 5.1 Driver};Server=yourServerAddress;" & _
                   "Database=yourDataBase;User=yourUsername;" & _
                   "Password=yourPassword;"
cn.open
rs.open "select * from Countries", cn, 3
rs.MoveFirst
while not rs.eof
    wscript.echo rs(0)
    rs.next
wend
cn.close
wscript.echo "End of program"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多