最近工作中有用到存储过程,关于存储过程其中EXECUTE IMMEDIATE在实际开发中用到的还是比较多的 于是乎就把自己在用到时存在的用法及问题在这里总结一下:

如果在存储过程中 有需要创建表格 更改表结构等操作的时候 并且在接下去的操作需要用到新的表或者结构等问题的时候 必须要使用EXECUTE IMMEDIATE 去执行SQL语句,否则由于oracle的机制则会提示报错,表或者表结构未创建或为修改,这里只举两个例子,实际运用得根据情况去判断!

最近的开发过程中也经常使用到执行一个字符串的SQL语句 需要将其插入到一个变量中来,EXECUTE IMMEDIATE 'SELECT T.ID FROM STUDENT T WHERE  A.NAME=''小明''' INTO V_ID(已在存储过程定义的变量名)

这里只是举例,假如小明只有一个 那个会顺利的将值插入到变量中,但如果是该变量存在两个或以上的值则需要用到

BULK COLLECT INTO 变量名;如果要将插入到多个变量中则在后面累加即可。

这里需要注意的是这个变量名必须是个数组类型,否则编译无法通过,如果对其循环可以执行相应的操作。

如果语句中需要用到变量则有两种方法:

方法1:可以拼接字符串类型的SQL语句,如(V_SQL:='SELECT T.ID FROM STUDENT T WHERE  A.NAME='|| V_NAME;)。

方法2:使用USING 关键字 例如: EXECUTE IMMEDIATE 'SELECT T.ID FROM STUDENT T WHERE  A.NAME=:V_NAME' USING '小明' INTO V_ID; 也可以把变量传过来 这里只举例

在一些特殊情况也可以通过这些操作来拼接SQL语句,例如限制条件的区分,这样会使一个SQL语句在不同的场景中有不同的效果,而不只是简单的用变量来取代的作用,

由于我使用oracle也只有几个月时间,所以对这个的心得也大概如此了,希望对大家以后的使用会有所帮助。