天天看点

oracle分区存储过程示例,Oracle 存储过程示例

Oracle 存储过程示例

1. SQLPLUS 之 SET 命令:

SQL>set colsep' ';     //-域输出分隔符

SQL>set echo off;     //显示start启动的脚本中的每个sql命令,缺省为on

SQL> set echo on               //设置运行命令是是否显示语句

SQL> set feedback on;       //设置显示“已选择XX行”

SQL>set feedback off;      //回显本次sql命令处理的记录条数,缺省为on

SQL>set heading off;     //输出域标题,缺省为on

SQL>set pagesize 0;      //输出每页行数,缺省为24,为了避免分页,可设定为0。

SQL>set linesize 80;      //输出一行字符个数,缺省为80

SQL>set numwidth 12;     //输出number类型域长度,缺省为10

SQL>set termout off;     //显示脚本中的命令的执行结果,缺省为on

SQL>set trimout on;   //去除标准输出每行的拖尾空格,缺省为off

SQL>set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off

SQL>set serveroutput on;  //设置允许显示输出类似dbms_output

SQL> set timing on;          //设置显示“已用时间:XXXX”

SQL> set autotrace on-;    //设置允许对执行的sql进行分析

set verify off                     //可以关闭和打开提示确认信息old 1和new 1的显示.

2. 过程

-- 表t5管理过程

-- BEGIN 存储过程

create or replace procedure tablemanage(optype in integer, pk in integer) as

-- 变量声明

v_optype integer := optype; -- 0 查询 1 删除

v_entity t5%ROWTYPE; -- 实体

v_pk integer := NVL(pk, '');

v_code NUMBER;

v_errm VARCHAR2(64);

CURSOR v_cursor IS

SELECT * FROM t5;

begin

-- 过程体

DBMS_OUTPUT.put_line('start table t5 process... ');

-- 查询

if v_optype = 0 then

-- 打开游标

OPEN v_cursor;

-- 提取数据

LOOP

fetch v_cursor into v_entity;

DBMS_OUTPUT.put_line('query...' || v_entity.id);

EXIT when v_cursor%NOTFOUND;

END LOOP;

-- 关闭游标

CLOSE v_cursor;

-- 删除

elsif v_optype = 1 then

delete from t5 where id = v_pk;

commit;

elsif v_optype = 2 then

insert into t5 values (3, 'wang5');

commit;

elsif v_optype = 3 then

update t5 set name = 'ma6' where id = v_pk;

commit;

end if;

DBMS_OUTPUT.put_line('start table t5 process...ok.');

exception

-- 异常处理

when others then

DBMS_OUTPUT.put_line('An exception occurred.');

v_code := SQLCODE;

v_errm := SUBSTR(SQLERRM, 1 , 64);

DBMS_OUTPUT.PUT_LINE('Error code ' || v_code || ': ' || v_errm);

rollback;

-- 记录错误日志表

DBMS_OUTPUT.put_line('start logging into error_log...');

insert into error_log values (sysdate, v_entity.id, v_code, v_errm);

commit;

DBMS_OUTPUT.put_line('start logging error_log... ok.');

-- END 存储过程

end tablemanage;

3. 创建表

create table t5(id integer primary key , name varchar(20));

create table error_log(now date primary key, id varchar2(20), error_code number, error_msg varchar2(255));

insert into t5 values (1, 'zhang3');

insert into t5 values (2, 'li4');

commit;

4. SQLPLUS调用过程

SQL> set serveroutput on

SQL> select * from t5

2 ;

ID NAME

---------- ----------------------------------------

2 li4

3 ma6

SQL> call tablemanage(0, 0);

start table t5 process...

query...2

query...3

query...3

start table t5 process...ok.

调用完成。

SQL>

5. 完成