存储过程

因为公司老项目有用到存储过程,我对这个东西不熟悉,所以想记录一下学习经历,并且记下一些小案例方便之后查看(后续整理更新)

 1、起因:A系统原本是在存储过程中使用dblink连接B系统的数据库,要拿client表里的数据,但是这张表数据太大了,晚上网络也不好,为了减少网络波动带来的影响,想把这张表落地到A系统数据库服务器。

解决方案:存储过程中加入删除表和新建表的语句(client_temp是要新建的临时表;client_xxx是同义词,他的dblink指向了B数据库;workdate是传入的参数)

先判断数据库中是否存在这张表,存在就删除表:execute immediate ‘drop table client_temp’;

新建表:execute immediate ‘create table client_temp as select * from client_xxx t where t.date='''||workdate||'''';

可能遇到的问题:

1、数据库用户权限不足,A系统有两个数据库用户A1和A2,A1创建了存储过程,并把执行的权限给了A2,A2执行到创建表的时候发现报错了,原因是A1没有创建表的权限;  解决方案:用system执行 grant create  table to A1; 

2、存储过程编译报错,原因是没有client_temp表;解决方案:提前创建好表,create table client_temp as select * from client_xxx t where 1=2;

速度是快了十分钟左右的。

 

存储过程例子

创建过程语法:
CREATE [OR REPLACE] PROCEDURE Procedure_name
[ (argment [ { IN | IN OUT }] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
[ AUTHID DEFINER | CURRENT_USER ]
{ IS | AS }
<类型.变量的说明>
BEGIN
<执行部分>
EXCEPTION
<可选的异常错误处理程序>
END;
 
 
 
 
posted @ 2022-08-01 00:02  不想卷了  阅读(31)  评论(0)    收藏  举报