- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
?
?
Oracle动态SQL之本地动态SQL的使用
?
?
论文导读:本地动态SQL在处理SQL语句时将其分为两类:一类是DDL语句、DCL语句、非查询的DML语句、单行查询的SELECT语句,这一类可使用EXECUTEIMMEIDIATE语句执行。
关键词:Oracle,数据库,PL/SQL开发动态SQL,本地动态SQL
?
引言
本地动态SQL在处理SQL语句时将其分为两类:一类是DDL语句、DCL语句、非查询的DML语句、单行查询的SELECT语句,这一类可使用EXECUTEIMMEIDIATE语句执行。第二类是多行查询的SELECT语句,这类语句需要通过游标来实现。
1、使用EXECUTEIMMEDIATE处理DDL、DCL、非多行查询的DML语句等动态SQL
使用EXECUTEIMMEDIATE来执行动态SQL是非常简单的,只需将要执行的动态SQL放到EXECUTEIMMEDIATE命令后即可。如下例:
declare
v_sqlvarchar2(1000);
begin
v_sql:=createtabletab_test(||namevarchar2(80)notnull,||
addrvarchar2(200),||birthdaydate);--DDL语句
executeimmediatev_sql;
v_sql:=grantselectontab_testtopublic;--DCL语句
executeimmediatev_sql;
v_sql:=insertintotab_test(name,addr)values(test1,test1addr);--DML语句
executeimmediatev_sql;
exceptionwhenothersthen
dbms_output.put_line(出现错误:||sqlerrm);
end;
执行完这段代码后,用SELECT查询一下新建的tab_test表结构及表中数据,结果如下:
SQLselect*fromtab_test;
NAMEADDRBIRTHDAY
test1test1addr
在这个例子中分别将三个简单的SQL语句赋值给一个字符串变量,然后通过EXECUTEIMMEDIATE命令来执行这个字符串中包含的SQL语句。
在实际的使用中,所使用到的DML语句往往不会如此简单,可能会包含入参、返回值等,这种情况就需要通过EXECUTEIMMEDIATE增加相应的子句来完成处理。完整的EXECUTEIMMEDIATE语句的格式如下:
EXECUTEIMMEDIATEsql_statement
[INTO{variable[,variable...]|record}]
[USING[IN|OUT|INOUT]bind_argument
[,[IN|OUT|INOUT]bind_argument...]]
[{RETURNING|RETURN}INTObind_argument[,bind_argument]...];
在这个完整的EXECUTEIMMEDIATE语句中,INTO子句表示在执行单行查询时将查询结果保存到指定的变量variable中;USING子句表示在执行的SQL语句中含有参数时使用bind_argument来替换参数;RETURNINGINTO子句表示在执行包含RETURNING子句的非查询DML语句时将返回值保存到bind_argument中。
下面通过几个例子来分别说明这几个子句的用法,首先看一个单行查询的例子。
declare
v_emp_tableemp%rowtype;
v_sqlvarchar2(1000);
begin
v_sql:=select*fromempwhereempno=:v_empno;
executeimmediatev_sqlintov_emp_tableusing7369;
dbms_output.put_line(emp_name=||v_emp_table.ename);
exceptionwhenothersthen
dbms_output.put_line(出现错误:||sqlerrm);
end;
在这个例子中使用了INTO子句和USING子句。INTO子句将查询的结果保存到变量v_emp_table中,同时在USING子句中用值7369替换SQL中的参数v_empno。需要注意的是,EXECUTEIMMEDIATE…INTO…只能用于返回单行结果的SELECT语句,如果查询结果有多行,必须使用游标的FETCH语句。
再看一个
您可能关注的文档
- 党中勤教授治疗胆囊息肉的临床经验-中医药疗法.docx
- 新形势下网络技术在电力信息通信中的应用.docx
- 一带一路沿线主要地区高速铁路机车动力系统专利竞争情报研究.docx
- 国际工程承包企业物流体系建设研究.docx
- 延续性护理对子宫切除术患者术后性生活质量及心理状态的影响1.docx
- 关于机电一体化设备故障诊断技术的研究.docx
- 求解带有利用率惩罚背包问题的参数自适应差分进化算法.docx
- 人性化护理在妇产科手术患者中的应用.docx
- 护士分层护理管理在护理管理中的应用体会.docx
- 中小型农业企业发展问题及解决措施.docx
- 交通运输-行业周报:24冬春航季启幕,国际航司时刻增长显著.docx
- 新材料-周报:2024年全球芯片市场将增长18.8%,美国宣布禁止向中国半导体、AI、量子领域投资.docx
- 金融-证券行业2024年三季报综述:自营业务支撑业绩回暖,全年业绩有望迎来正增长-华创证券[徐康]-20241105【7页】.docx
- 商贸零售行业2024年三季报业绩综述:零售行业需求承压影响盈利能力,期待消费信心改善带来拐点.docx
- 民生银行中国民生银行2024年第一次临时股东大会会议文件(《中国民生银行股份有限公司章程》修订对比表)2024年10月25日-188页.docx
- 明阳电气(301291)深耕新能源变电,海风起量,并牟定出海及电网.docx
- 建材、建筑及基建-公募REITs周报:建筑工地资金到位率连续提升,多地水泥价格跟涨.docx
- 建筑装饰-Q3板块营收业绩持续承压,增量政策有望促Q4边际改善.docx
- 生猪-24Q3总结:业绩亮眼.docx
- 社会服务行业2024年三季报业绩综述:社服板块收入略降利润下滑,K12培训、出境游、人服行业表现亮眼.docx
文档评论(0)