若我们有时候不需要这个默认值,需要取消他,改如何处理呢?此时,我们就可以利用undefine命令,来取消某个替换变量的默认值。当然,我们也可以利用Define命令来给某个替换变量设置一个新的值。在实际工作中,可能还是直接采用Define命令来为其设置一个默认值来的方便。 $ p! Y; S* {4 J& M* M, Q' l
6 ]5 c* o. }! _. f7 n
三、 测试完毕后,保存为脚本文件。 + B" q2 }7 Y% d/ o) x
为了增强这个SQL语句的可重用性,我们往往会把写好的SQL语句保存为脚本文件。如此的话,下次需要用到的时候,直接执行这个脚本语句即可。在保存的时候,为了有更好的可读性,笔者有一些小小的建议。
% j& u; A* i9 f* _1 `: l6 D+ M3 O6 i- ~! s, ]7 x
一是最好在脚本文件的开头,注释一些这条语句的具体用途。俗话说,好记性不如烂笔头。在几个月后,很难确保你还记得这条语句的用途。 + U: G4 x A! D0 f$ y6 t$ I; s0 ]
" M; h' r" R! g1 ]% i5 U& x2 B' \ 二是给可替换变量取一些比较直观的名字。否则的话,当使用数据库管理员可能直接都不知道某个替换变量所代表的含义。另外,列的替换变量跟查询语句中的替换变量最好进行区分,如可以利用前缀进行区别。如此做的话,这个语句的可阅读性就会增强。 ; ?8 v- b* R* G! a# v
# [4 |( [' u/ i1 c. u. Z! F
三是可利用Prompt命令来输出一些提示信息。在编写替换变量的时候,要像编写其他程序一样,养成为每个可替换变量做好注释的习惯。这时作为数据库管理员一个必备的技能之一。 2 d! Z9 _6 H1 V4 @4 X) J6 t: \/ J8 ^
3 ]) `2 v' m8 J* [( V 四、 其他解决方案。 7 s; {0 H- y7 W- |' X4 F
针对Oracle数据库SQL语句的交互性而言,它还提供了一些其他的解决方案。 3 I+ G7 q# L3 a I$ r
如利用ACCEPT、PAUSE、PROMPT三个命令结合使用提供一个模拟的用户输入界面。ACCEPT命令可以让数据库管理员指定替换变量的类型。因为Define定义替换变量默认值的时候,只能够接受字符型数据的默认值。若是其他数据类型的默认值的话,就要用ACCEPT来定义。而PAUSE顾名思义,可以让脚本语句暂时运行,以提供一个更加友好的用户界面。如可以让用户通过输入回车键来执行剩下的脚本语句等等。如此,就给用户一个“喘息”核对数据的机会。
. A" }& v2 v% H4 q% L5 J# W) r
# ^, R% ~0 |7 X7 x1 S; I 如可以通过绑定变量的方式,来实现替换变量的功能。绑定变量只在当前会话中存在,同名的绑定变量一最后一个定义为准。绑定变量在赋值的时候,比较麻烦,需要采用Excute命令来给绑定变量进行赋值。所以,在实际应用中,不是很广泛。 - P/ H( y( L2 {, q" Z; c
4 i/ O/ \. e/ V7 @: n
在这集中解决方案中,比较喜欢采用前面两种方式。即利用Define与Accept语句来定义替换变量,同时采用Prompt与Pause命令来给用户以及自己设计一个人性化的输入界面。 0 Z/ O7 C; r% T2 e
配置10g中SQL*Plus的autotrace 1 k6 t! A& c- @" f
$ W' S* `2 _$ T7 w% u& w& n
AUTOTRACE 是SQL*Plus 中一个工具,可以显示所执行查询的解释计划(explain plan)以及所用的资源。这本书中大量使用了AUTOTRACE 工具。
- F5 q2 V% ?7 b5 R6 y% y: J( _1 ^6 G0 s( l5 t" e6 `1 a, L
配置AUTOTRACE 的方法不止一种,以下是我采用的方法:
% [) `1 A% X1 t& N! K 1、
& S& S) M4 V- _2 x: `4 E% ~# M) i (1)cd [ORACLE_HOME]/sqlplus/admin;
6 I4 y8 y. j" r) t, d- ^+ K: ], H! g (2)作为SYS 或SYSDBA 登录SQL*Plus;
! z# ]6 I$ C% W% w* Y3 { (3)运行@/plustrce.sql;
% g/ N: Y# z5 D3 [ (4)运行GRANT PLUSTRACE TO PUBLIC。 ) K0 K1 ~- b m+ b
Examda提示: 可以把GRANT TO PUBLIC 中的PUBLIC 替换为某个用户。 . n6 A, r: ^, @" y, w. F
通过将PLAN_TABLE置为public,任何人都可以使用SQL*Plus 进行跟踪。这么一来,就不需要每个用户都安装自己的计划表。
5 D* }. |. s1 k+ _) e4 U" H 2、还有一种做法是,在想要使用AUTOTRACE 的每个模式中分别运行@utlxplan。
. I" M3 j' r$ u, @ 下一步是创建并授予PLUSTRACE 角色: |