oracle pl/sql之存儲過程(procedure)


PL/SQL塊最大優點:降低網絡開銷,提高應用程序性能。

文章需要用到的表結構及信息

select * from emp;
     EMPNO ENAME      JOB          MGR HIREDATE           SAL   COMM     DEPTNO
---------- ---------- --------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH      CLERK       7902 1980-12-17 12:00:00       5000            20
      7499 SMITH      SALESMAN        7698 1981-02-20 12:00:00       5000    300         30
      7521 WARD       SALESMAN        7698 1981-02-22 12:00:00     1437.5    500         30
      7566 JONES      MANAGER         7839 1981-04-02 12:00:00    8013.97            20
      7654 MARTIN     SALESMAN        7698 1981-09-28 12:00:00     1437.5   1400         30
      7698 BLAKE      MANAGER         7839 1981-05-01 12:00:00     3277.5            30
      7782 CLARK      MANAGER         7839 1981-06-09 12:00:00    3084.27            10
      7788 SCOTT      ANALYST         7566 1987-04-19 12:00:00     4163.1            20
      7839 KING       PRESIDENT        1981-11-17 12:00:00    6797.97            10
      7844 TURNER     SALESMAN        7698 1981-09-08 12:00:00       1725      0         30


desc emp;
 Name            Null?    Type
 ----------------------- -------- ----------------
 EMPNO           NOT NULL NUMBER(4)
 ENAME                VARCHAR2(10)
 JOB                  VARCHAR2(9)
 MGR                  NUMBER(4)
 HIREDATE             DATE
 SAL                  NUMBER(7,2)
 COMM                 NUMBER(7,2)
 DEPTNO               NUMBER(2)

1.procedure語法

create or replace procedure procedure_name

(argu1 datatype,argu2 datatype...)

is [as]

PL/SQL Block;

procedure_name:存儲過程名稱

argu1,argu2...:參數名稱,可以指定輸入參數(IN),也可以指定輸出參數(OUT),也可以指定輸入輸出參數(IN OUT)

datatype:參數數據類型,不能指定長度。

is [as]:開始一個PL/SQL塊

---輸出當前系統日期和時間的過程

create or replace procedure pro_output_time
is
begin
dbms_output.put_line(systimestamp);
end;
SQL> set serveroutput on;

2.procedure調試

//調試方法1

SQL> exec pro_output_time;

16-APR-14 08.42.33.678767000 AM +08:00

PL/SQL procedure successfully completed.

//調試方法2

SQL> call pro_output_time();

16-APR-14 08.42.47.881928000 AM +08:00

Call completed.

//調試方法3

SQL> begin

 2  pro_output_time();

 3  end;

 4  /

3.例子1:根據輸入的信息,增加一條僱員記錄

create or replace procedure pro_add_emp(v_empno number,v_ename varchar2,
v_sal number,v_deptno number,v_job varchar2 default 'CLERK')
is
begin
insert into emp(empno,ename,sal,deptno,job)
values (v_empno,v_ename,v_sal,v_deptno,v_job);
commit;
end;

4.例子2:僱員編號重複 &&  deptno不存在

---code

create or replace procedure pro_add_emp(v_empno number,v_ename varchar2,
v_sal number,v_deptno number,v_job varchar2 default 'CLERK')
is
v_no_deptno exception;
pragma exception_init(v_no_deptno,-2291);
begin
insert into emp(empno,ename,sal,deptno,job)
values (v_empno,v_ename,v_sal,v_deptno,v_job);
commit;
exception
when v_no_deptno then
raise_application_error(-20001,'deptno is not exist.');
when dup_val_on_index then
raise_application_error(-20002,'empno is duplicat.');
end;



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章