替代变量-----from cyber
--&变量名,&&变量名简析-----------------------------------------------------------
1 set verify on;
2 select * from tcpn_jodsmapping where productid = '&ProductID' and producteffdate = '&ProductEffdate'
3 ORDER by '&ProductID';
4 select * from tcpn_jodsmapping where productid = '&&ProductID' and producteffdate = '&ProductEffdate'
5 ORDER by '&ProductID';
& :“&变量名” --------- eg:&name;
生命周期:单次引用中,不需要声明,如果替换字符或日期类型,最好用单引号扩起
使用范围:where、order by、列表达式、表名、整个SELECT 语句中
&& :“&&变量名”-------eg:&&name;
生命周期:整个会话(session连接),不需要声明
-- ACCEPT-----------------------------------------------------------------------
1 ACCEPT pro_pID PROMPT 'Provide the Product ID and Eff date.'
2 select * from
3 tcpn_jodsmapping
4 where productid = '&pro_pID';
accept
生命周期:整个会话
预先声明,可以客户化提示信息,使用时用&引用声明的变量。
定义:
accept 变量名name number/char/date prompt '提示信息内容'即:ACC[EPT] variable [NUM[BER] | CHAR | DATE] [FOR[MAT] format] [DEF[AULT] default] [PROMPT text | NOPR[OMPT]] [HIDE]
解释:
PROMPT命令:用于输出提示用户的信息,以便使用户了解脚本文件的功能和运行情况
PAUSE命令:用于暂停脚本文件的运行
HIDE选项:用于隐藏用户的输入,使别人不可见,安全
这 条命令的意思是:当plsql程序段执行到变量name的时候,此时需要用户的交互才能继续执行下去,plsql程序段会显示“提示信息内 容”让用户输入相关信息(如果指定hide选项,那么在接下去用户输入的东西将被用星号显示出来增加安全,有点像输入密码),用户输入的内容被接收到并且 把它付给name,关于在“提示信息内容”下用户输入的内容的类型,plsql程序段开发人员来通过number/char/date指定,变量name 得到正确的值以后,继续执行相关下面的程序!
--DEFINE-----------------------------------------------------------------------
1 DEFINE DEF010003=010003;
2 DEFINE DEF010003
3 DEFINE DEF01000320090301=20090301;
4 DEFINE DEF01000320090301
5 SELECT * FROM tcpn_paymentitem
6 where productid = '&DEF010003'
7 and PRODUCTEFFDATE = '&DEF01000320090301';
8 UNDEFINE DEF010003;
9 UNDEFINE DEF01000320090301;
define :“define 变量名=变量值”eg:DEFINE a = clark;
生命周期:整个会话,预先声明,使用时用&引用声明的变量
define variable=用户创建的CHAR类型的值:define 变量名=值;
define 变量名:查看变量命令。
undefine 变量名:清除变量
define:查看在当前会话中所有的替换变量和它们的值
--------------------------------------------------------------------------------
使用范例:
1 declare
2 v_sal number(6,2);
3 v_ename emp.ename%type:='&ename';
4 begin
5 select sal into v_sal from emp
6 where lower(ename)=lower(v_ename);
7 if v_sal<2000 then
8 update emp set sal=v_sal + 200
9 where lower(ename)=lower(v_ename);
10 end if;
11 end;