替代变量

替代变量
前面的SQL语句都有一个共同的特点,即每一次执行SQL语句都会产生相同的结果。这样的SQL语句在商业系统几乎没有什么实际的作用
引入替代变量
SELECT empno, ename, sal
FROM emp
WHERE sal >= 1500;
改变需求要1600以上,你的SQL无法重用。
以&开始的替代变量
SELECT empno, ename, sal
FROM emp
WHERE sal >= &v_salary;
其中&v_salary就是替代变量。变量的名字你自己起,注意前面加&号。当运行上面的sal时,Oracle系统会给出:“输入v_salary的值:”的提示,此时可以输入任何您感兴趣的工资值,enter即可。
字符型和日期型替代变量
例子:
SELECT empno, ename, sal, job, deptno
FROOM emp
WHERE job =&v_job;
然后输入的是CLERK的话,系统返回错误信息:无效列名。这是为什么呢?因为job这一列的数据类型为字符型,所以CLERK必须用单引号括起来
然后就是字符型和日期型都必须用单引号括起来
以&&开始的替代变量
在介绍完了以&开始的替代变量之后,我们要介绍另一类替代变量,即以&&开始的替代变量。
&&和&的区别:&的变量每一次都需要给变量输入值,如果变量名不同每次都要重新输入。而&&开头的话,后面的同名&就不需要重新输入。
SELECT ename, job, &&v_col
FROM emp
ORDER BY &v_col;
替代变量可以出现的地方
替代变量几乎可以出现在SQL语句中的任何地方。替代变量可以出现在:
1、SELECT 子句中
2、ORDER BY子句中
3、WHERE子句中(替代变量甚至可以替代整个的条件表达式)
4、任何可以使用列或表达式的地方
5、表名出现的地方
6、整个的查询语句
使用DEFINE定义替代变量
除了以上介绍的使用替代变量的两种方法之外,还可以使用SQL*PLUS命令DEFINE来定义替代变量。DEFINE命令只能用来创建字符型的替代变量。
SQL>DEFINE v_job = CLERK
SQL>SELECT ename, sal, job
FROM emp
WHERE job ='&v_job'
ORDER BY sal;
可以使用一下的SQL*PLUS命令来创建一个字符型的替代变量,并为它赋值:
DEFINE 替代变量 = 变量值
可以使用一下的SQL*PLUS命令显示一个替代变量/替代变量的值以及数据类型:
DEFINE 替代变量名
SQL> DEFINE v_job
使用一下的SQL*PLUS命令显示所有的替代变量
DEFINE
ACCEPT替代变量
使用ACCEPT定义替代变量
SQL>ACCEPT &nm PROMPT 'Please Enter the Job:'
SQ>SELECT * FROM USER_BASE_INFO WHERE NAME_CN = &nm
这样的话我们执行select语句的时候就会有提示“Please Enter the Job”
使用ACCEPT命令的HEAD选项
如果公司中的某些信息只有经理们可以看,可以使用ACCEPT命令下的HIDE选项。该选项将是ACCEPT命令不显示用户的输入,就像在操作系统下输入口令似的
ACCEPT pwd PROMPT 'Please Enter Your Password' HIDE
SELECT ename, sal, job
FROM emp
WHERE &pwd = 'WANAGER'
这时候,密码会被*过滤掉
ACCEPT命令的格式和选项
除了上面介绍的ACCEPT命令的用法之外,还可以使用该命令显示地定义日期型或数字型变量。ACCEPT命令的格式如下:
ACCEPT 变量名 [数据类型][FORMAT 格式化模式][PROMPT 正文][HIDE]
其中:
变量名:存储输入值的变量名。如果该变量不存在,SQL*PLUS会自动创建它
数据类型:为数字型、日期型和字符型。字符型的最大长度是240个字节
FORMAT 格式化模式:它的定义与第9章中的一样,如99,999.00或A28等
PROMPT 正文:在用户输入变量的值之前系统的提示信息
HIDE:系统不显示用户的输入值,如口令(PASSWORD)
另外注意:在ACCEPT关键字之后的替代变量之前不能加&符号,但该替代变量被引用时在其前面要加&符号

posted @ 2017-01-10 10:21  guodaxia  阅读(401)  评论(0)    收藏  举报