oracle之存储过程,临时表,游标示例
来源:互联网 发布:网络管理 编辑:程序博客网 时间:2024/05/21 08:59
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;
- oracle之存储过程,临时表,游标示例
- oracle之存储过程,临时表,游标示例
- oracle存储过程之游标
- mysql--游标/递归/存储过程/临时表
- 存储过程,游标,循环,临时表
- mysql 存储过程临时表代替游标
- mysql 存储过程示例,有参有返回值,使用到了判断,循环,游标,临时表,事务
- Java调用oracle存储过程通过游标返回临时表数据
- Java调用oracle存储过程通过游标返回临时表数据
- ORACLE存储过程实战之二:游标
- ORACLE存储过程(四)之游标
- 存储过程示例:在存储过程中使用临时表
- oracle存储过程,游标
- oracle 存储过程 游标
- oracle存储过程--游标
- oracle 存储过程 游标
- oracle 存储过程 游标
- oracle存储过程游标
- Lock的使用---ReentrantLock
- Eclipse反向编译插件安装
- Android性能优化工具方法总结
- python编码问题
- 前端跳槽面试(慕课网笔记)
- oracle之存储过程,临时表,游标示例
- 尤肖虎,中国3G、4G掌门人
- 数组中的逆序对
- JAVA 字节流和字符流度读写的区别
- 侧滑点击事件
- 笔迹
- sql之left join、right join、inner join的区别
- 【leetcode】查找插入位置(二分)
- Vue.js画家技巧