当前位置:首页 > 日记 > 正文

oracle动态sql的详细介绍

oracle动态sql的详细介绍
1。静态和动态SQL sqlsql
Oracle的PL / SQL编译器块分为两种类型:一为预链接(早期绑定),在编译程序中的SQL语句已经确定,编译大多数属于这一类型;另一种是后期绑定(后期绑定),只有在运行阶段的SQL语句可以建立,例如当用户输入查询条件,然后Oracle的SQL引擎不会在编译的程序语句的时间是确定的,只有在一定的条件下,处理后提交给SQL引擎对用户输入的查询。通常,静态SQL使用以前的编译模式,而动态SQL使用后者的编写模式。
本文主要讨论动态SQL的开发,并给出了一些实用的开发技术。
2。动态sql程序开发
掌握了动态sql编译的基本原理,掌握了动态sql的基本思想,由于动态sql是一种不确定的SQL,它的实现有其自身的特点,在oracle中提供了执行即时语句来执行动态sql,其语法如下:
复制代码代码如下所示:
立即执行动态SQL语句使用绑定参数列表返回到输出参数的列表;这句话的解释如下:

1)动态SQL是指DDL和DML的不确定性(即DML与参数)
2)绑定参数列表是输入参数列表,也就是说,它的类型是类型,它与动态SQL语句中的参数(实际占位符,在函数中可以理解为函数的形式参数)绑定。
3)输出参数列表是执行动态SQL语句后返回的参数列表。
4)由于动态SQL是在运行时确定的,与静态相比,它将失去一些系统性能,以换取灵活性。
为了更好地说明它的发展过程,下面列出了一个例子。
设置数据库的EMP表,以下数据如下:

身份证件
名称
工资

一百
杰克
五千六百

一百零一
玫瑰
三千

一百零二
约翰
四千五百
要求uff1a
1。创建表并输入相应的数据。
2。他们的姓名和薪水的信息可以根据特定的ID查询。
三.对应于大于特定工资的查询的相应员工信息。
根据前面的需求,您可以创建三个进程,分别使用动态SQL:
过程1:
复制代码代码如下所示:
创建或替换程序create_table作为
开始
立即执行
创建表EMP(ID号),
名称VARCHAR2(10),
工资数);动态SQL DDL语句
插入EMP
值(100,'jacky ',5600);
插入EMP
值(101,'rose ',3000);
插入EMP
值(102,约翰',4500);
最后create_table;

过程中的两个:
复制代码代码如下所示:
创建或替换程序find_info(p_id数)为
v_name VARCHAR2(10);
v_salary数;
开始
立即执行
从EMP中选择名字、薪水
其中id =:1
使用p_id
回到v_name,v_salary;动态SQL查询语句
dbms_output.put_line(v_name | | 'income:| | to_char(v_salary));
例外
当别人然后
dbms_output.put_line(没有找到相应的数据);
最后find_info;

过程三:
复制代码代码如下所示:
Create or replace procedure find_emp (p_salary number) as
r_emp EMP %ROWTYPE;
c_type是REFCURSOR类型;
C1 c_type;
开始
打开C1
从EMP中选择*
工资范围>:1
使用p_salary;

取到r_emp C1;
退出时未发现C1 %;
dbms_output.put_line('salary| | to_char(p_salary)| | 'employees:);
dbms_output.put_line('id'to_char(r_emp)| | 'its名称:| | r_emp。名称);
结束循环;
关闭C1;
最后create_table;

注意:流程2中的动态SQL语句使用占位符:1,它相当于函数的形参。它是用来作为前缀,然后使用using语句来代替p_id在运行时:1,在这里p_id相当于函数的实际参数。此外,光标第三开辟过程是动态游标。它也属于动态sql的范畴。整个编译和开发过程非常类似于直接执行的执行过程。
三.动态sql语句的开发技术
上述分析,基于其灵活性的系统性能损失的动态SQL语句的执行,所以优化在一定程度上是必要的,根据实际开发经验,提出了一些开发技巧,需要指出的是,有很多的经验并不局限于动态SQL,也有适用于静态SQL将在注释的描述。
技巧1:尝试使用类似的SQL语句,这样Oracle本身就可以通过SGA中的共享池直接缓存SQL语句。然后,在下一次执行类似语句后,我们将直接调用缓存中的解析语句,从而提高执行效率。
技巧二:当涉及到集合单位时,尽量尽可能使用批量编辑器。例如,一般要求100和101的雇员增加10%的工资。
复制代码代码如下所示:
声明
num_list VARRAY类型是(20)号;
v_id num_list:= num_list(100101);
开始

我在v_id。第一..v_id.last环

执行immediate'update EMP
设置=工资* 1.2
其中id =:1
使用v_id(我);
结束循环;
结束;

对于上述处理,当数据量较大时会比较慢,所以如果链接的数量,整组一次性一次性传递给SQL引擎,这个处理效率要大大高于分离、批量处理的链接代码:
复制代码代码如下所示:
声明
num_list VARRAY类型是(20)号;
v_id num_list:= num_list(100101);
开始

就我在v_id。第一..v_id.last环

Execute immediate'update EMP
设置=工资* 1.2
其中id =:1
使用v_id(我);
结束循环;
结束;

这里是批量编辑所有的使用,使得该批处理的情况总结。
1)如果一个循环执行插入、删除、更新、和其他陈述是指集合元素,那么它可以被移动到一个FORALL语句。
2)如果选择进入、进入或返回子句,指一个集合,则应使用批量收集子句进行合并。
3)如果可能的话,应该使用主机数组来实现程序和数据库服务器之间的参数。
技巧三:使用nocopy编译器提高PL / sql.by默认性能的型,在型的价值转移的方式进行参数。但对于对象或类型的传输类型的参数设置,希望损失会很大,为了减少损失,可以用来参考的方式,即在参数声明的关键字参考nocopy规格可以达到同样的效果。例如,创建一个进程:
复制代码代码如下所示:
创建或替换程序测试(在p_object nocopy广场)…结束;

正方形是一个大对象类型,这是唯一的传递地址的方法,而不是整个对象。显然,这种处理也提高了效率。
4。总结
本文讨论了动态sql的编译原理、开发过程和开发技巧。本文在介绍了这篇文章之后,相信读者对动态sql程序的发展有了一个大致的了解,为以后的进一步工作打下了良好的基础。

相关文章

对jfCacheMgr.exe过程是怎样的是jf

对jfCacheMgr.exe过程是怎样的是jf

的是,是怎样,过程,电脑软件,jfCacheMgr,点评:有没有在任务管理器jfCacheMgr.exe过程为什么它一直在运行,是病毒吗把一个问题看进程jfCacheMgr.exe是 的起源和功能 的jfCacheMgr.exe过程程序文件播放器的皮肤软件程序由巨大的浙江影像网络公…

如何删除win7系统无用的账户,以避免

如何删除win7系统无用的账户,以避免

账户,系统,风险,删除,不必要,评论:删除不再使用的避免不必要的安全隐患和资源浪费的win7系统的用户名称,以下是具体的操作步骤,具有安全意识的朋友可以参考一下,希望对你有帮助。 当电脑WIN7系统用户名称不再使用,应将其删除,及时避免不必要的安…

两种方法来确定在windows7系统老光

两种方法来确定在windows7系统老光

光驱,系统,两种,方法来,电脑软件,点评:新系统的诞生必然会带来一些新的问题,如在Windows 7系统中未能识别出一些旧的DVD光盘。 新系统的诞生,必然会带来一些新的问题,如在Windows 7系统不能识别一些旧的DVD光盘,微软官方解释说,由于SATA驱动程序…

MySQL数据库对服务器端游标的限制

MySQL数据库对服务器端游标的限制

数据库,游标,服务器端,电脑软件,MySQL,例如,如果客户机执行查询,但只有第一行感兴趣,则行的其余部分不发送。 游标是只读的,游标不能用于更新行。 更新当前和删除在目前是无法实现的,因为它不支持可更新游标。 光标没有(不再保持开放后提交)。 …

腾讯微博能与博客(解决方案)同步吗

腾讯微博能与博客(解决方案)同步吗

解决方案,博客,腾讯微博,同步,能与,问题: 我经常写博客,我的新浪博客被新浪micro-blog.now同步,我打开腾讯微博客,让腾讯微博客和新浪博客同步,是竞争的关系我知道腾讯和Sina,能不能实现 答案uff1a 现在两个都是不错的竞争对手,但是腾讯微博并不…

在Win8.1设置SkyDrive与没有临时下

在Win8.1设置SkyDrive与没有临时下

脱机,设置,下载,文件,电脑软件,点评:用户习惯于SkyDrive不桌面版本似乎善于使用SkyDrive在Win8.1。默认情况下,所有文件都是联机的。这里的如何下载网盘离线设置。 With Windows 8.1 users, it will be found that the system is deeply inte…

ps自由变形工具

ps自由变形工具

工具,变形,自由,电脑软件,ps,在PS图象处理软件(以下简称PS),我们经常会遇到许多需要对象变形。Ldquo,自由转换,是实现这个功能的强大方法之一。掌握它的用法会给我们的工作带来极大的方便,我们都知道编辑PS(编辑)有一个转换菜单,子菜单包含缩放、旋…

Millet手机玩游戏不能全屏(解决方案

Millet手机玩游戏不能全屏(解决方案

解决方案,全屏,玩游戏,电脑软件,Millet,问题: 我的小米手机M2游戏不能全屏播放,原因是什么 答案uff1a 也许你下载的游戏不支持全屏,因为小米系统适合任何游戏支持。 (摘自:小米手册:米粉) 小米手机的其他知识 问:小米手机的软件在哪里下载 答:M…

删除电影或电视剧记录列表(图形)

删除电影或电视剧记录列表(图形)

列表,图形,删除,电视剧,电影,问题: 我经常用暴风影音看电影和电视节目。我发现右边的列表总是我以前看过的电影或电视节目的列表。我不希望它记录这些东西,我想删除,但我找不到操作菜单。我不知道怎么办才好。 答案uff1a 有没有办法删除在风…

查看PPS收集的视频(电视剧或电影){技

查看PPS收集的视频(电视剧或电影){技

电视剧,电影,技术,视频,电脑软件,我们用PPS播放电视剧或电影,满足你的喜好。我们收集他们。对于PPS新手,他想看视频的集合,但找不到收藏菜单。 打开PPS播放器,PPS的标志下,有一个Pentagram 图标,它是收集菜单(如图1),点击五角星;;看你的电视或电影视频…

一个非常实用的介绍win7自我设置的

一个非常实用的介绍win7自我设置的

设置,自我,电脑软件,评论:如果有老年人想使用电脑,他们会觉得字体很小,或者有时忘记带他们的眼睛。在这个时候,放大镜通过win7系统将可以解决这个问题,感兴趣的朋友可以参考一下。 现在的电脑肯定是每一个家庭都有,如果有老年人使用电脑,肯定会觉…

在backitup.exeBackItUp过程中的作

在backitup.exeBackItUp过程中的作

作用,过程中,电脑软件,backitup,exeBackItUp,点评:BackItUp.exe是一个领先的备份软件相关程序,用于备份文件在您的计算机上 进程文件:BackItUp或backitup.exe 过程名称:前面备份 过程类别:安全风险的过程 英文描述: backitup.exe是一个过程,属于…