PL/SQL中的where子句比较

首先以一个例子说明一下where子句中比较语句的问题。
DECLARE Department char(3);
begin
    Department:='CS';
delete from classes
 where department=Department;
     如果执行以上语句将产生灾难性的后果即:classes里的数据将全部删除,而不仅仅是那些department为CS的行。之所以出现这种情况,是因为SQL语句中标识符的分析方法。当PL/SQL引擎看到一个类似下面的条件:exp1=exp2
    exp1和exp2首先要被查看是否与操作的表中的列相匹配,然后再检查它们是否是PL/SQL语句块中的变量。PL/SQL是不区分大小写的,因此在上面的例子中,department和Department与classes表中的列相符,而不是与变量相符。
    如果该语句块有一标号,就可以使用与表列相同名字的变量,这只要在变量引用前加上标号就行了。这样,就能只删除那些满足department='CS'的行。
《1_DeleteBlock》
DECLARE Department char(3);
begin
    Department:='CS';
delete from classes
 where department= 1_DeleteBlock.Department;
需要说明的是,这种方法可以产生预期的效果,但不是一种好的编程风格。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值