在Oracle提供的相关工具中,如SQL PLUS管理平台中,允许数据库管理员采用替换变量来提高SQL语句的灵活性。替换变量的定义跟普通变量的定义类似,只需要在变量名前面加入&符号即可。当运行一段有替换变量的SQL语句时,数据库系统会自动提醒用户要输入哪些变量值。
语法: &替换内容
作用:提供用户输入的界面,在用户输入数据以后,先替换PL/SQL脚本,再编译执行。
案例:
1. 案例一:输入年龄,然后打印出来
SQL> declare
2 v_age number(3);
3 begin
4 v_age:=&年龄;
5 dbms_output.put_line('您的年龄是 = '||v_age);
6 end;
7 /
当运行时用户输入 年龄 的值是: 20,则
原值 4: v_age:=&年龄;
新值 4: v_age:=20;
说明:在用户输入“20”以后,将“&年龄”替换为了“20”。于是脚本的源代码发生了改变:
declare
v_age number(3);
begin
v_age:=20;
dbms_output.put_line('您的年龄是 = '||v_age);
end;
所以“&”变量并不是一个真正的变量,它不能保存任何内容,只是提供一个字符串替换的功能。
2. 案例二:用户输入姓名并打印。
declare
v_age varchar2(3);
begin
v_age:=&姓名;
dbms_output.put_line('您的姓名是 = '||v_age);
end;
问题:如果用户输入“a”,程序是否能够运行,如果能,打印的结果是什么?
分析:当用户输入“a”,上面代码就是:
declare
v_age varchar2(3);
begin
v_age:=a;
dbms_output.put_line('您的姓名是 = '||v_age);
end;
由于“a”前后没有单引号,所以会被当作“标识符”即当作变量名。
但是a这个变量又没有定义。所以一定会提示如下的
错误:
必须说明标识符'A'
解决的方法就是:在“&”前后加上单引号,即:
declare
v_age varchar2(3);
begin
v_age:='&姓名';
dbms_output.put_line('您的姓名是 = '||v_age);
end;
/
替代变量小结:
·替代变量的作用主要是为匿名块提供一个数据录入的界面。
·替代变量只是完成字符串替换的功能,不能保存值。
·如果替代变量是字符串,则必须加上单引号。
说明:如果是命名块,则通过名称和参数进行调用,此时不会再用替代变量。
