`
smallsir
  • 浏览: 10201 次
  • 性别: Icon_minigender_2
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

oracle脚本编写之执行动态sql语句

阅读更多
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 比以前可能用到的更容易并且更高效.
当意图执行动态语句时,适当地处理异常更加重要.应该关注于捕获所有可能的异常.
分享到:
评论

相关推荐

    oracle 查看当前会话执行的sql语句

    ### Oracle 查看当前会话执行的SQL语句 在Oracle数据库管理中,有时我们需要了解某个特定会话(Session)正在执行哪些SQL语句。这在性能调优、问题诊断等场景下尤为重要。以下将详细介绍如何通过不同的方法来查看...

    oracle利用批处理文件执行SQL语句,bat连接oracle数据库并执行语句

    接下来,我们可以编写SQL语句来执行各种操作。例如,删除用户可以使用`DROP USER`语句: ```sql DROP USER 用户名 CASCADE; ``` `CASCADE`关键字确保与该用户相关的所有对象(如表、索引等)也将被删除。 创建用户...

    Oracle批处理:使用C# 自带Oracle驱动一次执行多条Sql语句

    Oracle批处理是数据库操作中提高效率的重要手段,尤其是在C#编程环境下,利用Oracle的数据驱动进行批处理,可以显著提升大量SQL语句执行的速度。本文将深入探讨如何在C#中利用Oracle自带的驱动来实现批处理,以一次...

    linux下批量执行oracle脚本的shell脚本

    首先,我们来看标题中的"linux下批量执行oracle脚本的shell脚本",这指的是在Linux操作系统中,通过编写shell脚本来自动化执行一系列针对Oracle数据库的SQL命令。Shell脚本是Linux系统中的一种强大的自动化工具,它...

    Oracle数据库sql语句 跟踪器

    Oracle数据库SQL语句跟踪器,通常被称为SQL Monitor,是一种强大的工具,用于监控和分析数据库中的SQL语句执行情况。在Oracle环境中,理解SQL语句的行为是优化数据库性能的关键。SQL Monitor提供实时视图,帮助DBA...

    sqlserver自动生成sql语句工具sqlserver转oracle

    在压缩包子文件的文件名"ms转sql语句.exe"中,我们可以推测这可能是一个用于将SQL Server语句转换为Oracle兼容格式的可执行程序。这样的工具通常会提供用户友好的界面,让用户导入SQL Server的数据库元数据,然后...

    oracle-查找硬解析问题SQL语句

    在数据库中硬解析是万恶之源,为大家提供一个查找并且定位oracle硬解析问题SQL语句脚本

    压测Oracle的SQL语句的性能情况

    在Oracle环境中,LR脚本可以用于执行SQL语句,分析响应时间、事务速率等关键性能指标。 "直连Oracle执行SQL进行压测"意味着测试者直接与数据库交互,不通过中间层如应用程序服务器,这能更准确地反映出数据库本身的...

    java定时执行sql语句

    通过配置数据库连接信息和要执行的sql语句,可实现定时执行多个sql语句。 所要执行的语句只能是写死的,可支持sqlserver mysql oracle。 配置说明: config/sys.properties 中指定数据库类型及连接信息,执行间隔...

    Linux下定时自动执行Oracle_SQL

    本文将深入探讨如何在Linux环境下设置Crontab来定期执行Oracle SQL脚本,这一过程不仅能够提高工作效率,还能确保数据的及时更新与准确性。 ### 关键知识点详解 #### Crontab:Linux下的任务调度工具 Crontab是...

    ORACLE的SQL语句脚本

    本文将深入探讨"ORACLE的SQL语句脚本",特别是涉及的PL/SQL语言,以及如何利用这些脚本来创建表、索引和视图。 首先,我们来理解SQL(Structured Query Language),它是用于管理和操作数据库的标准语言。在Oracle...

    Oracle数据库sql转换mysql数据库工具

    "Oracle数据库sql转换mysql数据库工具" 提供了解决这一问题的解决方案,允许用户将Oracle数据库中的SQL语句或数据结构转换为MySQL兼容的格式。 在数据库迁移过程中,这样的工具至关重要,因为它可以简化工作流程,...

    批量执行SQL脚本

    1. **脚本组织**:首先,你需要将一系列SQL语句组织成单独的脚本文件,每个文件可能包含一个或多个SQL命令。例如,在提供的文件名“批量报表导入”中,我们可以推测这是一个与报表数据导入相关的脚本,可能包括创建...

    ORACLE_SQL语句

    虽然它们都能执行SQL语句,但SQL\*Plus提供了更多的命令和功能,如脚本执行、数据格式化等。 ### SELECT语句详解 #### 基本语法 基本的SELECT语句结构如下: ``` SELECT *|{[DISTINCT] column|expression [alias],...

    Oracle SQL自动调优生成报告和SQL语句的脚本

    这篇博客文章“Oracle SQL自动调优生成报告和SQL语句的脚本”提供了有关如何利用Oracle自带的工具进行SQL优化的具体步骤和脚本示例。 在Oracle数据库中,SQL调优主要包括以下几个方面: 1. **SQL分析**:通过执行`...

    一个简单的sql循环语句脚本

    在SQL(Structured Query Language)中,循环语句主要用于执行重复性的任务,特别是在处理大量数据或者需要按步骤操作的时候。在数据库编程中,我们通常使用PL/SQL(Oracle)、T-SQL(Microsoft SQL Server)或存储...

    Oracle & SQLServer 脚本批量执行方法

    对于更复杂的批量执行需求,可以使用编程语言如Python、Java或PowerShell来编写自动化脚本,读取文件,逐条执行SQL语句,这适用于跨数据库系统执行脚本。 2. **批处理文件**: 在Windows环境下,可以创建批处理文件...

    oracle脚本 常用的数据库sql及pl\sql语言

    Oracle数据库是全球广泛使用的数据库管理系统,它提供了丰富的SQL(结构化查询语言)和PL/SQL(过程化语言/SQL)工具来支持数据管理和应用程序开发。本文将深入探讨Oracle中的SQL和PL/SQL语言,以及它们在数据库管理...

    SQL语句教程 写法大全

    同时,本教程还涵盖了 SQL 高级知识,如 Top 语句、Like 语句、通配符、In 语句、Between 语句、Aliases 语句、Join 语句、Inner Join 语句、Left Join 语句、Right Join 语句、Full Join 语句、Union 语句、Select ...

    shell连接oracle数据库执行SQL工具脚本-支持select+inset+update

    shell连接oracle数据库工具脚本:支持select/insert/update/delete 部署位置:/root/sysmonitor db:数据库文件夹 dbconfig.properties:数据库配置文件, dbConnectTest.sh:连接测试文件 dbExecurteSQL.sh:...

Global site tag (gtag.js) - Google Analytics