04 Oracle儲存過程

2021-10-03 08:21:35 字數 1898 閱讀 5540

1.建立表:

create table t_dept(

deptno integer key primary,

dname varchar2(10),

loc varchar2(50)

);

2.插入資料:

insert into t_dept(deptno,dname,loc) values(10,'研發部','北京');

insert into t_dept(deptno,dname,loc) values(20,'開發部','天津');

insert into t_dept(deptno,dname,loc) values(30,'財務部','上海');

3.用儲存過程插入資料

--建立儲存過程,並設定引數d_name,loc預設為"new york

create or replace procedure new_dept(d_name in varchar2,loc in varchar2 :='深圳')

is dept_no interger; --定義變數

begin

--先得到部門的最大編號

select max(deptno) into dept_no from t_dept; --把最大編號賦值給變數dept_no

--在最大部門編號的基礎上加乙個值10

dept_no :=dept_no + 10;

--新增資料

insert into t_dept values(dept_no,d_name,loc);

exception

when others then

dbms_output.put_line('新增部門失敗');

end;

4.呼叫儲存過程

--因為儲存過程要傳遞引數,所以需要先定義引數

declare

dname varchar2(20) :='行政部';

loc varchar2(30) :='&請輸入位址';--執行後自己手動輸入

begin

new_dept(dname,loc);

end;

當然,第四步的時候,我們如果不設定loc,預設位址是『深圳』。或者直接在定義引數的時候輸入位址,無需執行後自己手動輸入;&表示執行後手動輸入。

5.執行結果:

select * from t_dept;

/*新增了乙個id為:40 行政部 長沙

deptno dname loc

10 研發部 北京

20 開發部 天津

30 財務部 上海

40 行政部 長沙

*/

6.刪除儲存過程:

drop procedure new_dept;
補充:

is as 在儲存過程中沒有區別,檢視中只用as不能用is;游標中只能用is,不能用as。

在select into 的時候有兩個異常需要關注 too_many_rows 、no_date_found。

declare

dept_no integer;

begin

select deptno into dept_no from t_dept;--deptno有四個值

dbms_output.put_line(dept_no);

exception

when too_many_rows then

dbms_output.put_line("取出的編號多於乙個!");

end;

--no_data_found 沒有取出乙個數值

04 Oracle 常用操作

1 建立表空間 設定自動擴充套件autoextend on next 100m create tablespace xx datafile d test test.dbf size 1g autoextend on next 100m maxsize unlimited 2 建立使用者 建立使用者 ...

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...

ORACLE儲存過程

自定義函式開始 create or replace function fn wftemplateidget templatecategoryid number,organid number,templatemode number return number istemplateid number i...