06-10
26

PL/SQL 中的EXECUTE IMMEDIATE

      一个程序,无论是用何种语言写的,实现它的松耦合都是有必要的。松耦合的体现大到MVC模式,小到成员变量的组合。耦合性越小,代码的可重用、可维护性就越高。

       这里说说我最近刚接触到的PL/SQL语言中的EXECUTE IMMEDIATE,它的意思是“立即运行”,所实现的功能正如其意。为了更好的理解它的用法,例如:

DECLARE

STR VARCHAR2(8000);

BEGIN

STR:='select ename from emp where empno=7788';

EXECUTE IMMEDIATE STR into v_ename;

DBMS_OUTPUT.PUT_LINE(V_NAME);

end;

/

这段代码实现的功能是等同于一条SQL语句

SQL<select ename from emp where empno=7788;

乍一看后者可实现的功能和前者一样,且有简便很多。而真正的情况却是,在实际的项目运作中,用EXECUTE IMMEDIATE来处理SQL语句占到了整个项目的70%~80%以上。

原因如下:

首先,如果在一个项目里直接使用DML语句(如inster、update、delete)来处理数据。那么一旦表或数据位置更换,代码就会出错。要修改的地方会很杂。而使用EXECUTE IMMEDIATE的好处是把SQL语句转换成字符串的形式。字符串中是可以插入变量的,好处不言而喻。

其次,消除隐患,如无表操作。正常情况下,用SQL<Create TABLE EMP...时候,ORACALE会先去验证时候有这个表,如果没有将报错。而时候EXECUTE IMMEDIATE,才用处理字符串的方式,无需担心这样的问题。

再来在真正的项目中,对于变量的使用次数也是很高的。比如客户要看一月、二月、三月……的数据,如果但用SQL语句去写,耦合性太强。这就是为什么推荐用EXECUTE IMMEDIATE来处理数据的原因。

PS:使用EXECUTE IMMEDIATE值得注意的两点,一来在用DDL语句(如select)时,无法直接运行,需要先into到一个变量里。再来,如上面例子中的str应该设置成多大为好,推荐设置成varchar2(8000),以免程序报错。

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: PL/SQL
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.