脚本可以带参数,在脚本中通过&n来引用参数,n为1表示为第一个参数,2表示第二个参数,依次类推。如:
/****test.SQL****/set ver off; connect omc/&1
insert into test values(&2);
commit;
执行该脚本的方法是:SQL>@e:\test.SQL omc self 45
如果参数是字符串,且字符串有空格,应该用双引号或单引号扩起,如果字符串中有双引号,则只能用单引号扩起,如果字符串中要输入单引号,则只能用双引号扩起,且输入两个单引号才代表一个单引号。如:
/********test.********/
set ver off;
connect omc/&1@&2
create table test(s varchar2(20)); insert into test values('&3'); commit; 执行:
sql>@e:\test.
omc self hello
sql>@e:\test.
omc self “hello world”
sql>@e:\test.
omc self hello world’
sql>@e:\test.
omc self “hello ‘’zte’’world”
sql>@e:\test.
omc self ‘hello “zte” world’ 正常情况下,slq*plus执行时,碰到&符号,就会作为参数来处理,如果&符号后跟的是数字,就会从命令行中取相应的值替换&n,如果找不到,如n为3,但执行时只带了2个参数,sql*plus就会在屏幕上提示输入参数。如果&后跟的不是数字,而是其它字符,则sql*plus会把&及其后的字符串(截止到空格为止)当作一个参数提示输入。
如: select ‘hello&good china’ from dual; 那么如何将&作为普通字符处理呢?除了前面介绍的定义escape环境参数外,另一方法是,&符号后紧跟单引号(之间可以跟空格)。如: select ‘hello&’||’good china’ from dual; select ‘hello& ’||’good china’ from dual;
所以,一般情况下在sql*plus下,执行语句时或脚本时,对&字符需要特殊处理一下,因为它是sql*plus中的特殊字符。