`
ronon
  • 浏览: 196149 次
  • 性别: Icon_minigender_2
  • 来自: 武汉
社区版块
存档分类
最新评论

[转]ORACLE EXECUTE IMMEDIATE 小结

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

相关推荐

    EXECUTE IMMEDIATE用法小结

    `EXECUTE IMMEDIATE`是Oracle数据库中的一个关键特性,用于执行动态SQL语句或PL/SQL块。在Oracle 8i之前,`DBMS_SQL`包是处理动态SQL的主要工具,但`EXECUTE IMMEDIATE`的引入提供了一种更简单、更高效的替代方案。...

    oracle使用dblink的例子

    #### 小结 通过上述过程,可以有效地比较两个Oracle数据库中相同表的行数一致性。这种方法对于数据迁移、数据校验等场景非常有用。需要注意的是,在实际应用中,应确保源数据库和目标数据库的DBLink配置正确无误,...

    oracle stream

    ### 小结 以上步骤详细介绍了如何在两台 Oracle 数据库之间配置 Streams 进行数据同步。通过这一系列的配置,可以确保两台数据库之间的数据能够实时同步,这对于构建高可用性系统至关重要。在实际操作过程中,还需要...

    Oracle经典教程

    #### 小结 以上知识点涵盖了Oracle数据库的基本概念、安装过程、SQL语言基础、高级查询技术、数据库对象管理、PL/SQL编程以及与.NET平台的集成等内容。通过学习这些知识,可以为日后深入研究Oracle数据库打下坚实的...

    javassist-3.13.0-GA.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    scratch少儿编程逻辑思维游戏源码-光线投射引擎 v0.9.zip

    scratch少儿编程逻辑思维游戏源码-光线投射引擎 v0.9.zip

    全套S7-1200 PLC与KTP触摸屏实现恒压供水PID控制案例详解:程序样例+项目图纸+操作注释

    内容概要:本文详细介绍了基于S7-1200 PLC的一拖三恒压供水系统,涵盖PLC程序、PID控制、触摸屏界面及项目图纸等方面。PLC程序方面,重点讲解了PID控制功能块的应用及其参数配置,确保系统能够根据设定值和实际测量值调整输出,保持供水压力恒定。触摸屏程序提供了直观的操作界面,允许操作人员实时监控和调整系统参数。项目图纸展示了详细的硬件连接和布线方式,有助于理解和实施系统安装与调试。此外,文中还分享了许多调试经验和注意事项,如PID参数整定、泵组切换逻辑、报警处理机制等。 适合人群:从事自动化控制系统设计、调试的技术人员,尤其是对PLC编程和PID控制感兴趣的工程师。 使用场景及目标:适用于工业现场的恒压供水系统设计与实现,旨在提高系统的稳定性和效率,减少维护成本。通过学习本文,读者可以掌握S7-1200 PLC编程技巧、PID控制原理及触摸屏应用方法。 其他说明:本文不仅提供了理论知识,还包括大量的实战经验和调试技巧,帮助读者更好地理解和应用相关技术。

    aws-java-sdk-s3-1.12.259.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    网络仿真与自动化_华为ENSP模拟器_MobaXterm会话管理_Python脚本自动化生成Telnet会话文件_用于批量创建连接ENSP设备的MobaXterm会话_自动解析拓扑.zip

    网络仿真与自动化_华为ENSP模拟器_MobaXterm会话管理_Python脚本自动化生成Telnet会话文件_用于批量创建连接ENSP设备的MobaXterm会话_自动解析拓扑

    【Linux内核调试】基于KGDB的内核调试技术详解:从原理到实战案例

    内容概要:本文详细介绍了使用KGDB(Kernel GNU Debugger)调试Linux内核的方法及其重要性。文章首先强调了Linux内核作为系统核心的重要性及其调试的必要性,随后介绍了KGDB的基本原理和优势,包括其基于调试stub和GDB串行协议的工作机制。接着,文章详细描述了使用KGDB调试内核的具体步骤,包括准备工作、内核配置、设置启动参数、建立调试连接和进行调试操作。文中还通过一个实战案例展示了KGDB在解决实际问题中的应用,并总结了使用KGDB时的注意事项和常见问题的解决方法。最后,文章展望了KGDB未来的发展方向和应用场景,如优化调试性能、支持新型硬件架构以及在嵌入式系统、云计算和大数据领域的应用。 适合人群:具备一定Linux系统开发经验的研发人员,尤其是那些需要调试和优化Linux内核的工程师。 使用场景及目标:①帮助开发者深入了解Linux内核的运行状态,精准定位并修复内核问题;②优化内核性能,提高系统的稳定性和可靠性;③适用于嵌入式系统开发、远程服务器维护等场景,特别是在硬件资源有限或无法直接接触设备的情况下。 其他说明:在使用KGDB进行调试时,需特别注意串口设置的一致性、内核版本的兼容性以及调试信息的完整性。同时,要解决常见的连接失败、断点无效等问题,确保调试过程顺利进行。未来,KGDB有望在技术上不断优化,并拓展到更多应用场景中,为Linux系统的持续发展提供支持。

    CNC雕刻机STM32F407源码详解:带详细中文注解与原理图解析

    内容概要:本文深入剖析了一款基于STM32F407的CNC雕刻机控制系统,涵盖硬件原理图和源码实现。首先介绍了步进电机驱动部分,详细解释了XYZ三轴的方向引脚配置及时序控制,确保电机平稳运行。接着讨论了PWM脉冲生成的核心配置,通过定时器精确控制雕刻精度,并解决了高速雕刻时的脉冲丢失问题。串口通信部分采用DMA+空闲中断,显著提升了数据处理效率。运动插补算法利用定时器触发DMA传输脉冲,实现高效的三轴联动。此外,文中还涉及了G代码解析、运动前瞻算法以及硬件设计中的防呆措施,如IO口的TVS二极管和RC滤波。最后,分享了一些调试经验和隐藏的开发彩蛋,如通过LED灯效显示工作状态和电流检测实现堵转保护。 适合人群:具备嵌入式开发基础,尤其是对STM32和CNC雕刻机感兴趣的开发者和技术爱好者。 使用场景及目标:①帮助开发者理解和实现CNC雕刻机的控制系统;②提供详细的硬件和软件设计方案,便于动手制作;③分享调试技巧和实战经验,提高系统的稳定性和可靠性。 阅读建议:本文不仅提供了详细的代码实现和硬件设计,还包括了许多实战经验和调试技巧,因此在阅读过程中应重点关注这些细节,并尝试复现相关功能。

    aws-java-sdk-s3-1.12.265.jar中文文档.zip

    # 压缩文件中包含: 中文文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    ELMAN网络回归预测MATLAB代码:清晰注释,本地EXCEL数据读取,初学者易上手

    内容概要:本文详细介绍了如何使用MATLAB实现ELMAN神经网络进行时间序列预测。首先讲解了如何读取本地Excel数据,并进行了必要的数据预处理,如转置和归一化。接着,构建了ELMAN网络,设置了训练参数,并进行了模型训练。随后,展示了如何进行预测并将结果反归一化,以及如何通过可视化手段评估预测效果。文中还提供了多个调试技巧,帮助解决常见的新手问题。 适合人群:具备基本MATLAB编程能力,希望学习时间序列预测的新手。 使用场景及目标:适用于需要进行时间序列数据分析和预测的研究人员或工程师,目标是掌握ELMAN神经网络的基本原理及其在MATLAB中的具体实现方法。 其他说明:本文不仅提供完整的代码示例,还包括了许多实用的小贴士,如数据读取、归一化、网络结构调整等,帮助读者更快地上手并解决问题。

    winmm简谱播放器3音轨程序代码ZXQZQ-2025-5-4.txt

    winmm简谱播放器3音轨程序代码ZXQZQ-2025-5-4

    scratch少儿编程逻辑思维游戏源码-鼓手猴子.zip

    scratch少儿编程逻辑思维游戏源码-鼓手猴子.zip

    thymeleaf-1.0.0-beta5.jar中文-英文对照文档.zip

    # 压缩文件中包含: 中文-英文对照文档 jar包下载地址 Maven依赖 Gradle依赖 源代码下载地址 # 本文件关键字: jar中文-英文对照文档.zip,java,jar包,Maven,第三方jar包,组件,开源组件,第三方组件,Gradle,中文API文档,手册,开发手册,使用手册,参考手册 # 使用方法: 解压最外层zip,再解压其中的zip包,双击 【index.html】 文件,即可用浏览器打开、进行查看。 # 特殊说明: ·本文档为人性化翻译,精心制作,请放心使用。 ·只翻译了该翻译的内容,如:注释、说明、描述、用法讲解 等; ·不该翻译的内容保持原样,如:类名、方法名、包名、类型、关键字、代码 等。 # 温馨提示: (1)为了防止解压后路径太长导致浏览器无法打开,推荐在解压时选择“解压到当前文件夹”(放心,自带文件夹,文件不会散落一地); (2)有时,一套Java组件会有多个jar,所以在下载前,请仔细阅读本篇描述,以确保这就是你需要的文件;

    基于改进二进制粒子群算法的含需求响应机组组合问题研究——MATLAB代码实现及复现国际学术研究A Modified Binary PSO在微电网中的创新应用

    内容概要:本文详细介绍了如何使用MATLAB实现改进二进制粒子群算法来解决含需求响应的机组组合问题。文章首先构建了机组组合问题的基本模型,定义了机组的数量及其最小和最大发电功率等参数。接着,在此基础上加入了需求响应机制,通过设置需求响应的最大可削减负荷量和补偿系数,实现了对负荷侧的管理。为了提高求解效率,采用了一种改进的二进制粒子群算法,该算法通过独特的更新策略使粒子更快更准地找到最优解。此外,还讨论了微电网调度中如何降低发电成本并确保供电稳定性,强调了需求响应在优化调度中的重要性。 适合人群:对电力系统优化、机组组合问题、需求响应机制以及改进粒子群算法感兴趣的科研人员和技术开发者。 使用场景及目标:适用于需要优化电力系统调度的研究项目或实际工程应用,旨在通过引入需求响应机制和改进的粒子群算法,降低发电成本,提高系统的灵活性和经济效益。 其他说明:文中提供的MATLAB代码示例有助于理解和复现算法的具体实现,同时提醒了一些常见的陷阱和注意事项,如负荷预测误差的影响和合理的参数选择。

    威纶触摸屏与台达变频器RS485通讯:控制正反转、点动及监视频率电流电压程序实现

    内容概要:本文详细介绍了威纶触摸屏与台达变频器通过RS485通讯实现控制与监视的方法。首先,文章解释了MODBUS RTU协议的基础,包括读写指令的数据帧格式。接着,描述了威纶触摸屏和台达变频器的通讯参数设置步骤,确保双方参数一致。随后,提供了具体的Lua脚本代码示例,展示了如何通过写入特定寄存器来控制变频器的启动、正反转、点动、停止等功能,以及如何读取变频器的频率、电流、电压等运行参数。此外,还提到了一些常见的调试技巧和注意事项,如数据类型的正确转换、线序连接、通讯超时处理等。 适合人群:从事自动化控制系统开发的技术人员,尤其是熟悉威纶触摸屏和台达变频器的工程师。 使用场景及目标:适用于需要通过RS485通讯接口实现威纶触摸屏对台达变频器进行远程控制和实时监测的应用场景。主要目标是提高系统的自动化程度和可靠性,减少人工干预。 其他说明:文中提供的代码和配置方法可以直接应用于实际项目中,但在具体应用时需要注意不同型号设备的具体参数差异。调试过程中可以借助串口助手等工具进行辅助验证。

    「高精度UWB模块测距代码程序,支持基站和标签设置编号,实时距离数据查看,烧录单片机」

    内容概要:本文详细介绍了基于UWB(超宽带)技术的多设备测距系统的设计与实现。主要内容涵盖设备ID管理、双向测距(TWR)算法、温度补偿、功耗优化、串口通信协议设计等方面。文中提供了具体的C语言代码片段,展示了如何通过宏定义控制设备类型,利用位操作高效管理设备ID,采用双向测距算法提高测距精度,通过加速度计动态调整测距频率以优化功耗,以及设计轻量级串口通信协议确保数据传输可靠性。此外,还讨论了一些常见的烧录和调试问题及其解决方案。 适合人群:具有一定嵌入式开发经验的研发人员,特别是从事无线通信、室内定位系统开发的技术人员。 使用场景及目标:适用于需要实现高精度室内定位系统的开发者,帮助他们理解和掌握UWB模块的工作原理及其实现细节,从而能够构建稳定的多设备测距系统。 其他说明:文中提到的具体实现方法和技术细节对于理解和优化UWB模块的应用非常有价值,尤其是关于设备管理和测距算法的部分。同时,文中提供的代码片段可以直接用于实际项目中,加快开发进度并提高系统的稳定性。

    即时通讯_分布式系统_WebSocket_Golang_Redis_MySQL_RabbitMQ_Gin_Logrus_Docker_微服务架构_高并发_消息队列_实时聊天_多节点.zip

    即时通讯_分布式系统_WebSocket_Golang_Redis_MySQL_RabbitMQ_Gin_Logrus_Docker_微服务架构_高并发_消息队列_实时聊天_多节点

Global site tag (gtag.js) - Google Analytics