PL/SQL变量名和表中列名相同的错误

来源:互联网 发布:本地域名服务器在哪 编辑:程序博客网 时间:2024/04/26 01:46

 话不多说,先来看一个例子吧。

 

从上面这个例子可以看出,当变量名name和表string中的列名NAME相同时,则会造成严重的后果--表string中所有的记录都会被删除!

 

之所以发生这种情况是因为SQL语句中的标示符被分析的方式时特别的。当PL/SQL引擎看到一个条件类似于exp1=exp2的时候,exp1和exp2首先被查看,看看它们是否与要操作的表中的列相匹配,然后再检查它们是否是PL/SQL块中的变量。PL/SQL是大小写不敏感的,因此上面那个例子中的name和NAME都与string表中的列相关联,而不是与变量相匹配。这个条件将对表中的每个行都求值为TRUE,这样所有的行就被删除了。

 

一个解决的办法是使用标签,我们仍然可以对变量使用与表列相同的名字,只要在变量引用之前放置标签就可以了。如下所示

 

 

我觉得这虽然可以解决问题,可毕竟不是长久之策。在编写PL/SQL代码的时候还是要养成良好的编程风格,这样才会使自己写的代码更容易被别人看懂,也容易自己将来维护。

原创粉丝点击