oracle之存储过程,临时表,游标示例

news/2024/6/18 22:30:31 标签: 存储过程, 临时表, 游标

oracle之存储过程,临时表,游标示例

  • 博客分类: 
  • oracle

oracleproc临时表游标 

参考资料 
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.iteye.com/blog/782067 
总结如下: 
DDL是一种消耗资源非常大的操作,运行时尽量不要使用DDL语句,应用程序需要的临时表应在运行之前就开始创建。不必在每个存储过程中创建一次。临时表总是存在的,他们作为对象存在于数据字典中,并且总是保持为空,直到有会话在其中放入数据 
1 创建临时表 
Sql代码 

 收藏代码

  1. create global temporary table 表名  
  2. (  
  3.   ID               VARCHAR2(100 CHAR),  
  4.   NAME         VARCHAR2(100 CHAR)   
  5. )  
  6. on commit preserve rows;  


2 创建存储过程 
Sql代码 

 收藏代码

  1. create or replace procedure proc_XXX(  
  2. mycur out SYS_REFCURSOR  
  3. as  
  4. TYPE My_CurType IS REF CURSOR;  
  5. CUR_1 My_CurType;  
  6. tempa varchar2;  
  7. tempb varchar2;  
  8. --此处可声明更多变更^_^  
  9. begin  
  10.    
  11.     OPEN CUR_1 FOR  select * from 表名;  
  12.     
  13.     --使用前先清空  
  14.     execute immediate 'truncate table  临时表表名';  
  15.   
  16.   LOOP  
  17.   FETCH CUR_1 INTO  tempa;  
  18.   EXIT WHEN CUR_1%NOTFOUND;  
  19.       
  20.       --进行相关的业务查询,将结果返回于更多变量上,插入临时表数据        
  21.      tempa:='1';  
  22.      tempb:='jack';  
  23.      insert into 临时表表名(ID,NAME)values(tempa,tempb);   
  24.      commit;    
  25. end loop;      
  26.   open mycur for  select * from  临时表表名;        
  27.   CLOSE  CUR_1;  
  28.   message :='查询临时表成功';  
  29.   EXCEPTION  
  30.   WHEN OTHERS THEN  
  31.    message :='查询临时表失败';  
  32. end  proc_XXX;  


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

 收藏代码

  1. CREATE OR REPLACE PROCEDURE Report_Month_Responsibility(  
  2.  o_cur OUT SYS_REFCURSOR  
  3. )  
  4. IS  
  5. STR VARCHAR2(200);  
  6. tb_count INT;  
  7. BEGIN  
  8.   --先判断全局临时表是否存在,没存在则重新建立:  
  9.   select count(*) into tb_count from dba_tables where table_name='REPROTTEST';  
  10.   if tb_count=0 then  
  11.     STR:=' CREATE GLOBAL TEMPORARY TABLE REPROTTEST(  
  12.            ID INT,  
  13.            ANAME VARCHAR2(20)  
  14.     ) ON COMMIT PRESERVE ROWS';  
  15.      execute immediate STR;  
  16.   end if;  
  17.     
  18.   STR:='INSERT INTO REPROTTEST(ID,ANAME)  VALUES(1,''1'')';  
  19.   execute immediate STR;  
  20.   COMMIT;  
  21.   STR:='SELECT * FROM REPROTTEST';  
  22.   OPEN o_cur FOR STR; -- 给游标变量赋值  
  23. END Report_Month_Responsibility;  


2 调用存储过程 
Sql代码 

 收藏代码

  1. CREATE OR REPLACE PROCEDURE proc_X()  
  2. IS  
  3.   v_ID INT;  
  4.   v_ANAME VARCHAR2(20);        
  5.    --定义游标:  
  6.    v_account_cur SYS_REFCURSOR;  
  7. BEGIN  
  8.      --调用存储过程:  
  9.        Report_Month_Responsibility(v_account_cur);         
  10.        fetch v_account_cur into v_ID,v_ANAME;  
  11.       --用循环显示游标中的记录:  
  12.        while v_account_cur%found loop  
  13.              dbms_output.put_line('The value of column ID is: '||v_ID);--打引列ID  
  14.              dbms_output.put_line('The value of column ANAME is: '||v_ANAME);    
  15.              --打引列ANAME            
  16.              fetch v_account_cur into v_ID,v_ANAME;  
  17.        end loop;  
  18.        close v_account_cur;      
  19.        execute immediate 'truncate TABLE REPROTTEST';     
  20. end proc_X;  

https://liuzidong.iteye.com/blog/1177894

 

 

 

 

 

oracle之存储过程,临时表,游标示例

2011-09-22 14:49:10            

收藏   我要投稿

 

总结如下:
DDL是一种消耗资源非常大的操作,运行时尽量不要使用DDL语句,应用程序需要的临时表应在运行之前就开始创建。不必在每个存储过程中创建一次。临时表总是存在的,他们作为对象存在于数据字典中,并且总是保持为空,直到有会话在其中放入数据
1 创建临时表
Sql代码 
create global temporary table 表名 

  ID               VARCHAR2(100 CHAR), 
  NAME         VARCHAR2(100 CHAR)  

on commit preserve rows; 

2 创建存储过程
Sql代码 
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 创建临时表,插入数据,返回结果集
Sql代码 
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 调用存储过程
Sql代码 
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; 

作者“咫尺天涯”

https://www.2cto.com/database/201109/105306.html

 

 


http://www.niftyadmin.cn/n/857397.html

相关文章

具体案例 快速原型模型_三个案例教会你Rhino异形建模命令,网红景观小品轻松做!...

在经过了前面几次课的学习以后&#xff0c;有很多 景观专业 的同学们也发来提议&#xff0c;希望能看一看 犀牛 在处理一些小而精的 景观小品 时候的运用。为此&#xff0c;本次讲座精选了 三个案例 &#xff0c;从不同的角度展示了犀牛 简洁又强大 的建模造型能力。█ 案例一&…

vm无法连接虚拟设备sata01_「云网络安全」云网络安全101:Azure虚拟网络服务端点...

Microsoft Azure提供了两个类似但不同的服务&#xff0c;允许虚拟网络(VNet)资源私下连接到其他Azure服务。Azure VNet服务端点和Azure私有端点(由Azure私有链接提供支持)都通过允许VNet流量不通过internet与服务资源通信来促进网络安全&#xff0c;但它们之间存在一些区别。这…

acc 蓝牙_蓝牙耳机acc什么意思

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。蓝牙耳机acc是杜比实验室为音乐社区提供的技术&#xff0c;是一种高压缩比的编码算法。蓝牙耳机就是将蓝牙技术应用在免持耳机上&#xff0c;让使用者可以免除恼人电线的牵绊&#x…

【Oracle】PL/SQL 存储过程 显式游标、隐式游标、动态游标

【Oracle】PL/SQL 显式游标、隐式游标、动态游标 2013年06月17日 09:02:51 AlphaWang 阅读数&#xff1a;13009更多 个人分类&#xff1a; 【Database】 在PL/SQL块中执行SELECT、INSERT、DELETE和UPDATE语句时&#xff0c;ORACLE会在内存中为其分配上下文区&#xff08;Con…

qt序列化自定义对象_Java序列化浅析

定义Java序列化是指将Java对象保存为二进制字节码的过程&#xff1b;Java反序列化表示将二级制字节码转化为Java对象的过程。Java序列化的原因由于Java对象的生命周期比JVM短&#xff0c;JVM停止运行之后&#xff0c;Java对象就不复存在&#xff0c;如果想要在JVM停止运行之后&…

c++相对路径怎么判断_你知道怎么选择优质的轻钢龙骨吗?

轻钢龙骨作为新型的建筑材料&#xff0c;在轻钢别墅的建筑中应用非常广泛&#xff0c;适用于多种建筑屋顶的造型装饰&#xff0c;以及吊顶的基础材料。轻钢龙骨优点轻钢龙骨优点&#xff1a;1、重量轻、强度高、防水、防火、防震、隔音、吸音2、线条简洁&#xff0c;美观大方3、…

i5集显和独显的区别_独显和集显的区别是什么,核显又是什么意思?

首先假加装科普一下什么是显卡&#xff0c;英文名Video card Graphich全称显示接口卡&#xff0c;又称显示适配器&#xff0c;是计算机基本配置最重要的一个组成部分&#xff0c;承担输出显示图形的任务&#xff0c;显卡由GPU也就是显示芯片&#xff0c;显存&#xff0c;PCB板组…

android 环形时间显示_Android_Android实现自定义圆形进度条,今天无意中发现一个圆形进度 - phpStudy...

Android实现自定义圆形进度条今天无意中发现一个圆形进度&#xff0c;想想自己实现一个&#xff0c;如下图&#xff1a;基本思路是这样的&#xff1a;1.首先绘制一个实心圆2.绘制一个白色实心的正方形&#xff0c;遮住实心圆3.在圆的中心动态绘制当前进度的百分比字符4.绘制一个…