利用替换变量提高Oracle数据库系统的交互性
" l5 R$ K' e+ u/ A0 {: q数据库管理员在写SQL命令的时候,总希望SQL语句能够满足不同环境的需要。为此,可以通过交互式命令来提高SQL语句的灵活性。当在一个SQL语句中,加入了交互式变量之后,在语句运行之时,数据库就会提醒用户输入相关的变量。
. O6 j c2 R0 B4 |* F" q; m# l, g0 g, O" w. g. ?! ?: H
不过在实际工作中,往往把这个SQL语句保存为脚本。如此的话,可以进一步提高脚本文件的可重用性。有时会,在数据库管理的时候,结合替换变量,写一些有用的脚本文件,可以起到画龙点睛的作用。笔者在平时数据库开发与管理中,就喜欢采用这种方式来简化工作。在这篇文章中,笔者就结合自己的工作经验,给大家谈谈如何在Oracle数据库中利用可替换变量来提高SQL语句的灵活性。以及在使用替换变量时的一些注意点。 + ?$ j9 c4 P) H$ @* y% U
% ]' _% Y" G1 [- L 一、 定义与使用替换变量。
g6 u3 R' J: x4 `) ^: P$ p 在Oracle提供的相关工具中,如SQL PLUS管理平台中,允许数据库管理员采用替换变量来提高SQL语句的灵活性。替换变量的定义跟普通变量的定义类似,只需要在变量名前面加入&符号即可。如上面例子中的“&name_filed”就表示一个替换变量。当运行一段有替换变量的SQL语句时,考试.大提示数据库系统会自动提醒用户要输入哪些变量值。
; h8 q4 p3 W7 \* A% B: B4 r6 Y7 d4 O8 j, z7 R
如在如下这条语句中,&name_filed表示用户想要显示的字段值。若用户想要显示某个表中的多个字段的话,则可以在这里定义多个替换变量。而条件语句中的’&NAME’则表示一个限制条件,或者说一个查询参数。这条语句的大意就是用户输入员工的名字,然后让系统查询出用户想了解的信息,如用户的身份证号码等等。 + b' K; Z( q: W7 K$ y
9 |, z; X: \/ I; I, O
SQL> select &name_filed from dtmfg.ad_user t where t.name like ’&NAME’;
' g3 H; o8 p: z4 l; u- I 细心的读者或许会发现,在查询条件中的替换变量,为什么要用单引号括起来呢?这是因为,我们在写SQL语句的时候,若字段时字符型的话,就需要用单引号括起来。所以,在定义替换变量的时候,跟平时写SQL语句类型。若数据类型是字符或者日期型的,则需要在定义替换变量的时候,用单引行括起来。否则的话,在用户执行这条语句、输入变量的时候,每次都需要把括号添加进去。那就非常的麻烦。相比起来,还不如在定义这条SQL语句的时候,就加入单引号。如此,在输入对应值的时候,就不用用单引号括起来了,可以直接输入。 ( g& [' M& v* X' M# N2 D
, d9 x/ j. }( s4 |1 h 另外,替换变量不但在Select语句中可以使用,在Update等语句中也可以普遍应用。 ' Y% r3 _* e$ i9 s# j/ {6 m
, k4 ?9 g% b9 K/ R, S+ ], N
二、 定义默认值。 ' y! m" l5 R6 L2 |! ~+ @
有时候,对于替换变量我们可能会有默认值。如果数据库管理员已经知道替换变量的具体值,又想避免运行脚本文件时反复出现,则可以给替换变量定义一个默认值。在SQL Plus平台中,数据库管理员可以利用Define命令来定义替换变量的默认值。
! L" c& N% t3 H l8 X. U) g# Q9 D
9 V1 j6 ~+ s2 v2 p5 `5 u e7 Y' Q 在定义替换变量默认值的时候,需要注意几个问题。
: u" a, C0 k# J0 Z" g8 k 一是要合理使用单引号。该用单引号括起来的,就要使用单引号;不需要用的时候,坚决不用。否则的话,会造成SQL语句的运行错误。那么什么时候该用单引号呢?这主要是根据SQL语句来的。平时在写SQL语句的过程中要用到单引号的,则在定义默认值的时候,也要用单引号括起来。如果平时不用的话,则就可以不用。如在定义字段名称的默认值时,就不需要用单引号括起来。画蛇添足,反而会导致SQL语句的执行错误。
! R4 F5 ?; z" z4 y% C: y) i" }# W, Y% w
二是这只是定义了一个默认值。当定义来一个默认值之后,系统就不会提示用户输入相关的参数,而直接采用默认值。如在上面这个例子中,若利用define NAME=’SuperUser’这条语句定义了NAME的默认值之后,在执行这条Select语句的时候,就不会再提示用户输入NAME值。我们可以利用Define命令来查看当前环境中所有的可替换变量的值。也可以利用Define NAME来查看可替换变量NAME的默认值。 , }2 Y0 { e; R9 _. \
0 ^( T Q# o3 e$ H, G, h
三是若用户采用的是脚本文件的话,则可以直接把这个定义默认值的语句放在脚本文件的一开始。如此的话,这个默认值的定义就会随着脚本文件而走。用户不用每次使用脚本文件的时候,都先去定义默认值。这个这个默认值的作用域只是适用于当前的会话。当数据库管理员结束当前的会话后,这个变量的默认值也就失效了。为了在下次重新会话的时候,仍然可以利用这个默认值,故在脚本文件一开始定义可替换变量的默认值,也是非常有必要的。 y# e/ W0 H0 r9 V( M: m9 q
% r- z9 ~1 l# z) W. x
四是利用Define命令来定义可替换变量的时候,有一个限制条件。即可替换变量必须是字符型的数据。若用户想定义的可替换变量是数字型的,如员工的薪水,此时,就需要采用ACCEPT命令。否则的话,就是一个无效的默认值。 |