EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块.动态创建和执行SQL语句性能超前,EXECUTE IMMEDIATE的目标在于减小企业费用并获得较高的性能,较之以前它相当容易编码.尽管DBMS_SQL仍然可用,但是推荐使用EXECUTE IMMEDIATE,因为它获的收益在包之上。
使用技巧
1. EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交
如果通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分. 如果通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据
2. 不支持返回多行的查询,这种交互将用临时表来存储记录(参照例子如下)或者用REF cursors.
3. 当执行SQL语句时,不要用分号,当执行PL/SQL块时,在其尾部用分号.
4. 在Oracle手册中,未详细覆盖这些功能。下面的例子展示了所有用到Execute immediate的可能方面.希望能给你带来方便.
5. 对于Forms开发者,当在PL/SQL 8.0.6.3.版本中,Forms 6i不能使用此功能.
EXECUTE IMMEDIATE用法例子
1. 在PL/SQL运行DDL语句
begin
execute immediate 'set role all';
end;
2. 给动态语句传值(USING 子句)
declare
l_depnam varchar2(20) := 'testing';
l_loc varchar2(10) := 'Dubai';
begin
execute immediate 'insert into dept values (:1, :2, :3)'
using 50, l_depnam, l_loc;
commit;
end;
3. 从动态语句检索值(INTO子句)
declare
l_cnt varchar2(20);
begin
execute immediate 'select count(1) from emp'
into l_cnt;
dbms_output.put_line(l_cnt);
end;
4. 动态调用例程.例程中用到的绑定变量参数必须指定参数类型.黓认为IN类型,其它类型必须显式指定
declare
l_routin varchar2(100) := 'gen2161.get_rowcnt';
l_tblnam varchar2(20) := 'emp';
l_cnt number;
l_status varchar2(200);
begin
execute immediate 'begin ' || l_routin || '(:2, :3, :4); end;'
using in l_tblnam, out l_cnt, in out l_status;
if l_status != 'OK' then
dbms_output.put_line('error');
end if;
end;
5. 将返回值传递到PL/SQL记录类型;同样也可用%rowtype变量
declare
type empdtlrec is record (empno number(4),
ename varchar2(20),
deptno number(2));
empdtl empdtlrec;
begin
execute immediate 'select empno, ename, deptno ' ||
'from emp where empno = 7934'
into empdtl;
end;
6. 传递并检索值.INTO子句用在USING子句前
declare
l_dept pls_integer := 20;
l_nam varchar2(20);
l_loc varchar2(20);
begin
execute immediate 'select dname, loc from dept where deptno = :1'
into l_nam, l_loc
using l_dept ;
end;
7. 多行查询选项.对此选项用insert语句填充临时表,用临时表进行进一步的处理,也可以用REF cursors纠正此缺憾.
declare
l_sal pls_integer := 2000;
begin
execute immediate 'insert into temp(empno, ename) ' ||
' select empno, ename from emp ' ||
' where sal > :1'
using l_sal;
commit;
end;
对于处理动态语句,EXECUTE IMMEDIATE比以前可能用到的更容易并且更高效.当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常.
转自:http://wenku.baidu.com/view/6dfdff4e767f5acfa1c7cde9.html
分享到:
相关推荐
在上面的示例中,我们使用 EXECUTE IMMEDIATE 语句来执行动态 SQL 语句,包括动态 DDL、动态 DML insert 和动态 DML select。这些示例展示了 EXECUTE IMMEDIATE 语句的使用方法和灵活性,使得开发者可以根据需要灵活...
execute immediate 用法研究 ...Execute Immediate 是一个功能强大且灵活的语句,可以满足各种动态 SQL 语句和 PL/SQL 块的需求。但是,也需要注意使用技巧和限制,以确保正确和高效地使用 Execute Immediate。
根据给定的信息,本文将详细解释动态PL/SQL的相关知识点,包括动态SQL的基本概念、如何使用`EXECUTE IMMEDIATE`语句创建表、插入数据以及查询数据等。 ### 动态SQL简介 在PL/SQL中,动态SQL指的是运行时才能确定其...
PLSQL开发过程中动态使用DBMS_SQL 在 PL/SQL 开发过程中,使用 SQL、PL/SQL 可以实现大部分的需求,但是在某些特殊的情况下,在 PL/SQL 中使用标准的 SQL 语句或 DML 语句不能实现自己的需求,比如需要动态建表或...
- **动态SQL**:通过EXECUTE IMMEDIATE语句执行字符串形式的SQL,适应更灵活的需求。 3. **PL/SQL控制结构** - **条件判断**:IF-THEN-ELSIF-ELSE语句用于根据条件执行不同的代码路径。 - **循环**:WHILE、FOR...
例如,可以使用`INTO`子句将查询结果插入到变量中,或使用`EXECUTE IMMEDIATE`动态执行SQL。 7. **事务管理**: PLSQL支持事务的概念,可以使用`COMMIT`提交事务,`ROLLBACK`回滚事务,以确保数据的一致性和完整性...
- **动态SQL**: 使用EXECUTE IMMEDIATE执行动态构建的SQL语句。 #### 十一、综合练习 - 结合前面学习的内容,设计并实现具体的练习案例,加强理解和应用能力。 #### 十二、模拟项目 - 通过实际项目的实施,将所学...
在 Oracle 中,`EXECUTE IMMEDIATE` 是一种常用的执行动态 SQL 的方式。下面通过几个示例来具体说明: 1. **执行 DML 语句** ```plsql DECLARE n_deptno NUMBER := 20; BEGIN EXECUTE IMMEDIATE 'SELECT ...
- EXECUTE IMMEDIATE:使用此命令执行字符串形式的SQL语句。 - INTO子句:用于将动态查询的结果赋值给变量。 - 游标FOR LOOP:与动态SQL结合,可以方便地遍历和处理动态查询结果。 在实际开发中,掌握这些基本...
### Oracle 动态 SQL 执行详解 在 Oracle 数据库中,动态 SQL ...通过使用 `EXECUTE IMMEDIATE` 或者 DBMS_SQL 包,我们可以轻松地构建和执行动态 SQL 语句。然而,在实际应用中也需要谨慎考虑其性能和安全性问题。
- 动态SQL:EXECUTE IMMEDIATE和DBMS_SQL包 - 游标表达式和游标变量的高级应用 - PL/SQL包和类型:创建和使用 - PL/SQL中的对象关系编程 10. **AppendixA - 实战案例与解决方案** - 解决实际问题的PL/SQL代码...
Oracle PlSql 存储过程详解 Oracle PlSql 存储过程是 Oracle 数据库中的一种编程语言,用于实现复杂的业务逻辑和数据处理。...本地动态 SQL 可以使用 EXECUTE IMMEDIATE 语句来执行,并可以使用绑定变量来提高性能。
6. **动态SQL**:使用EXECUTE IMMEDIATE和PREPARE-EXECUTE-CLOSE组合来执行动态构建的SQL语句。 7. **包**:如何创建和使用包来组织相关的PLSQL代码,提高代码复用性和模块化。 总之,PLSQL与Oracle SQL结合使用,...
书中会解释如何使用EXECUTE IMMEDIATE语句以及绑定变量来实现动态SQL,同时强调了安全性和性能优化的重要性。 书中还会涉及PL/SQL中的事务管理,包括COMMIT、ROLLBACK和SAVEPOINT操作。掌握事务管理对于保证数据...
例如,我们可以通过BEGIN...END块来组织代码,通过EXECUTE IMMEDIATE动态执行SQL语句。 3. 异常处理部分: PLSQL提供了一个强大的异常处理机制,允许我们预定义或自定义异常,并在发生错误时进行相应的处理。异常...
例如,通过EXECUTE IMMEDIATE语句动态执行SQL语句,或者通过CURSOR声明和处理结果集。 5. **子程序**:PLSQL支持创建存储过程、函数和包,这些子程序可以封装复杂的业务逻辑,提高代码复用性和可维护性。存储过程不...
6. **动态SQL**:掌握如何在PL/SQL中执行动态SQL语句,使用EXECUTE IMMEDIATE和DBMS_SQL包。 7. **事务控制**:理解事务的概念,学习提交、回滚和保存点操作,以及如何控制事务的隔离级别。 8. **包**:学习创建和...
8. **动态SQL**:通过EXECUTE IMMEDIATE语句,可以在PLSQL中执行字符串形式的SQL,增强了灵活性,常用于处理不确定的查询结构。 9. **游标变量**:游标变量是PLSQL中的一种特殊类型,用于存储游标对象,可以在程序...
- **动态SQL**:通过EXECUTE IMMEDIATE语句,可以在运行时动态执行SQL,增强灵活性。 - **PL/SQL记录类型和集合类型**:自定义数据类型,提高代码复用性和模块化。 4. **最佳实践** - 遵循良好的编程规范,如...