回答

收藏

如何在SQLPLUS中执行SQL脚本期间回显文本

技术问答 技术问答 259 人阅读 | 0 人回复 | 2023-09-14

我有一个批处理文件,该文件在sqlplus中运行一个SQL脚本,并将输出发送到日志文件:
1 j. E& V6 w  m$ m+ ?1 i. i7 L7 I9 h
sqlplus用户/密码 RowCount.log
# n. E6 G( }7 E5 f3 |- d6 i; \+ @
; k3 v1 L0 X% g9 ^
我的日志文件包含以下内容:$ z1 {# N6 W  Y! f4 q
Connected to:
# ^7 k2 M+ w$ [Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production; ~7 [( D" r6 h9 Z3 c* E7 |0 Y
SQL> SQL>
) \8 ]: s2 s3 R* @; Q; y; `5 f6 v1 i  COUNT(*)! G- m' j% {; ]/ L% I1 k; Z$ m
----------
6 g/ b4 t* s* ^" I9 Y# K3 `1 ]     02 |" I2 o# R7 m5 i
SQL> 6 B7 R9 x8 ?/ {# T" ]; J3 t
  COUNT(*)
6 B8 ]9 m" z' w& @----------. Z3 a) n3 G$ o. Z" c' F4 P
     0
0 U/ e; f3 b- V. j/ S等等,但是它有数千行输出,因此很难确定哪个结果属于哪个语句。3 ?; I% l! Y& p2 R& X& G( k& c
我想在输出中添加一些格式,以便我可以识别发生了什么。可以对执行的语句进行回显,也可以在脚本中手动插入一些“ echo”语句。理想情况下,它看起来像这样:
1 I, F3 h$ m7 o# t; v- `2 _SQL> select(*) from TableA;1 [* `/ L, g/ e  e; ^
  COUNT(*); |" N) Q6 O5 v; m( y: B
----------
: ?: e1 `! @, T& U     00 z. [8 n  U0 a8 }5 d8 V4 B- b
SQL> select(*) from TableB;
: q& a! M, B" K) G! T0 W4 V  COUNT(*)$ G3 s' G. m; m
----------
2 y* W5 L! K4 y% D- ?  {  X     0; v: `: E/ x$ f% m, ]
                5 P9 [- T* F% y0 ]( Q
解决方案:6 g; p$ a! k' k; m( m
               
' t; n2 M6 h7 ]7 t7 R8 j* Q& }- C3 C, D$ T" `0 F2 d
; U& W- h3 t2 ?* l. L
                您可以SET ECHO ON在脚本的开头使用来实现此目的,但是,您必须使用@而不是# H* S9 V& I) }" {1 U
test.sql
/ L9 I2 P: ]2 g) ]6 T9 KSET ECHO ON
8 ~! N& U% @) B" y: \/ WSELECT COUNT(1) FROM dual;% U& J7 A5 @7 ]( r
SELECT COUNT(1) FROM (SELECT 1 FROM dual UNION SELECT 2 FROM dual);1 M5 U' x# I' J- i% X: v: V
EXIT6 B9 ?+ ^0 z4 J$ ]  e
终端9 F9 p- q- Z: M; ^. |
sqlplus hr/oracle@orcl @/tmp/test.sql > /tmp/test.log
4 G* ^1 Q8 {# C  M; {  `测试日志
$ c$ Z0 p2 R# c9 b7 n/ e5 cSQL>
, n1 R) S5 b2 L& X$ nSQL> SELECT COUNT(1)从对偶;: M# M7 b. X4 G+ f1 K
  COUNT(1)
/ g6 H3 F1 [; B. X& j. n: ]----------
7 j7 T3 n- S# |9 B$ d+ |9 y     1个: c2 V8 p7 V( C* m. y' e! _; d
SQL>
* l3 H- B; D" p5 V- V) T- HSQL> SELECT COUNT(1)FROM(SELECT 1 FROM dual UNION SELECT 2 FROM dual);$ }" l! d4 c( H& X  t
  COUNT(1)
% K; E# l. [( {# A----------
8 M+ Y; L$ E% g     2个2 {* ^/ M/ x7 |' ]4 s; x1 t
SQL> 0 G3 m; [5 }9 c; l- W* F5 P
SQL>退出
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则