在没有“SQL>”行前缀的文件中获取 SQL*Plus

Posted

技术标签:

【中文标题】在没有“SQL>”行前缀的文件中获取 SQL*Plus【英文标题】:Get SQL*Plus out in a file w/out "SQL>" line prefixes 【发布时间】:2012-10-22 22:12:46 【问题描述】:

我正在尝试让 SQL*Plus 在其输出文件中写入进度,该文件应该在某种程度上可以呈现为报告,即没有应用程序原生的不良格式。特别是,我想摆脱每一行似乎都以 SQL> 开头的 SQL>。这是我调用 sqlplus 的 shell 脚本:

#!/usr/bin/ksh

$ORABIN/sqlplus $ORADBUSER/$ORADBPASSWD@$ORADB<<!!>./orclTest.log

SELECT 'IN sqlplus' AS MESSAGE1 FROM dual;


VARIABLE rowCnt number;
BEGIN
SELECT COUNT(*) INTO :rowCnt FROM dual;
END;
/

SELECT 'Dual has ' || :rowCnt || ' rows' AS MESSAGE2 FROM  dual;


!!

当我运行它时,这是我在 orclTest.log 中得到的:

SQL*Plus: Release 10.2.0.3.0 - Production on Mon Oct 22 18:06:02 2012

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> SQL>
MESSAGE1 
----------
IN sqlplus

SQL> SQL> SQL> SQL>   2    3    4
PL/SQL procedure successfully completed.

SQL> SQL>
MESSAGE2
------------------------------------------------------
Dual has 1 rows

告诉 sqlplus 不要给我它的标准格式,比如标题和前缀,只输出:

MESSAGE1 
----------
IN sqlplus


MESSAGE2
------------------------------------------------------
Dual has 1 rows

【问题讨论】:

当您使用它时:将用户名密码作为参数传递给您对 sqlplus 的调用。 'sqlplus /nolog username password sid' 并在 SQL 部分执行 'connect &1/&2@&3'。这样您的用户名和密码就不会出现在进程列表中。 'ps -ef | grep sqlplus' 【参考方案1】:

如果您想省略SQL&gt; 提示符

 set sqlprompt ''

如果要删除打印的数字以表示多行语句中的后续行

set sqlnumber off

【讨论】:

谢谢,成功了。但是我如何摆脱有时会在 SQL> 之后显示的“2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 2 3 4”之类的东西(不在这个例子中)? @foampile - 更新了我的答案 为你准备了另一个:***.com/questions/13038825/…。看看这个。谢谢!

以上是关于在没有“SQL>”行前缀的文件中获取 SQL*Plus的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:通过 if 语句选择奇数行

SQL*Plus中怎么执行多个*sql脚本文件

想行行行行行行行寻寻

怎么向oracle中导入大sql文件

删除反复行SQL举例

第一章:oracle_sql语句之select语句