600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > oracle之存储过程 临时表 游标示例

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

时间:2024-03-21 06:27:47

相关推荐

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

数据库|mysql教程

oracle,存储,过程,临时,游标,示例,如下,DD

数据库-mysql教程

ios美丽说源码,ubuntu卡安装界面,爬虫技术能做到,php检测php 菜鸟教程,东莞seo整站lzw

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

手机钓鱼源码,vscode怎么打开工作区间,ubuntu 取消注释,tomcat编译jsp错误,教同事爬虫,本地测试php代码,深圳小红书推广乐云seolzw

h5青龙源码,Vscode不能显示图片,Ubuntu桌面包,域名访问不到tomcat,爬虫龟,php 凌晨时间戳,娄底seo优化有哪些,php农业商城网站源码,炫酷登录模板lzw

总结如下:

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

1 创建临时表

Sql代码

create global temporary table 表名

(

IDVARCHAR2(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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。