设为首页 收藏本站
查看: 952|回复: 0

[经验分享] oracle之存储过程,临时表,游标示例

[复制链接]
YunVN网友  发表于 2016-8-14 06:32:26 |阅读模式
参考资料
1 ORACLE 存储过程返回临时表结果集
http://hi.baidu.com/h_sn999/blog/item/4211810f4d7542fdaa645738.html
2 ORACLE 在存储过程中使用临时表
http://blog.csdn.net/wekily/article/details/6120900
3 Oracle存储过程中创建临时表<原创>
http://blog.sina.com.cn/s/blog_4c7ae2a80100bki3.html
4 在ORACLE存储过程中创建临时表
http://huqiji.iyunv.com/blog/782067
总结如下:
DDL是一种消耗资源非常大的操作,运行时尽量不要使用DDL语句,应用程序需要的临时表应在运行之前就开始创建。不必在每个存储过程中创建一次。临时表总是存在的,他们作为对象存在于数据字典中,并且总是保持为空,直到有会话在其中放入数据
1 创建临时表

create global temporary table 表名
(
ID               VARCHAR2(100 CHAR),
NAME         VARCHAR2(100 CHAR)
)
on commit preserve rows;

2 创建存储过程

create or replace procedure proc_XXX(
mycur out SYS_REFCURSOR
as
TYPE My_CurType IS REF CURSOR;
CUR_1 My_CurType;
tempa varchar2;
tempb varchar2;
--此处可声明更多变更^_^
begin
OPEN CUR_1 FOR  select * from 表名;
--使用前先清空
execute immediate 'truncate table  临时表表名';
LOOP
FETCH CUR_1 INTO  tempa;
EXIT WHEN CUR_1%NOTFOUND;
--进行相关的业务查询,将结果返回于更多变量上,插入临时表数据      
tempa:='1';
tempb:='jack';
insert into 临时表表名(ID,NAME)values(tempa,tempb);
commit;  
end loop;   
open mycur for  select * from  临时表表名;      
CLOSE  CUR_1;
message :='查询临时表成功';
EXCEPTION
WHEN OTHERS THEN
message :='查询临时表失败';
end  proc_XXX;

参考更多
1 创建临时表,插入数据,返回结果集

CREATE OR REPLACE PROCEDURE Report_Month_Responsibility(
o_cur OUT SYS_REFCURSOR
)
IS
STR VARCHAR2(200);
tb_count INT;
BEGIN
--先判断全局临时表是否存在,没存在则重新建立:
select count(*) into tb_count from dba_tables where table_name='REPROTTEST';
if tb_count=0 then
STR:=' CREATE GLOBAL TEMPORARY TABLE REPROTTEST(
ID INT,
ANAME VARCHAR2(20)
) ON COMMIT PRESERVE ROWS';
execute immediate STR;
end if;
STR:='INSERT INTO REPROTTEST(ID,ANAME)  VALUES(1,''1'')';
execute immediate STR;
COMMIT;
STR:='SELECT * FROM REPROTTEST';
OPEN o_cur FOR STR; -- 给游标变量赋值
END Report_Month_Responsibility;

2 调用存储过程

CREATE OR REPLACE PROCEDURE proc_X()
IS
v_ID INT;
v_ANAME VARCHAR2(20);      
--定义游标:
v_account_cur SYS_REFCURSOR;
BEGIN
--调用存储过程:
Report_Month_Responsibility(v_account_cur);      
fetch v_account_cur into v_ID,v_ANAME;
--用循环显示游标中的记录:
while v_account_cur%found loop
dbms_output.put_line('The value of column ID is: '||v_ID);--打引列ID
dbms_output.put_line('The value of column ANAME is: '||v_ANAME);  
--打引列ANAME         
fetch v_account_cur into v_ID,v_ANAME;
end loop;
close v_account_cur;   
execute immediate 'truncate TABLE REPROTTEST';   
end proc_X;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-257298-1-1.html 上篇帖子: Oracle ADF中使用自定义css实现文字倒立 下篇帖子: 获取Oracle 表信息 整成数据字典
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表