二十 Oracle學習筆記 編寫儲存過程

2021-08-22 07:08:51 字數 3141 閱讀 5199

一、編寫儲存過程

1.復用匿名**塊,我們需要使用儲存過程,函式,觸發器等,儲存過程就是封裝了乙個匿名**塊,可以通過引數進行輸入,輸出值。

我們可以通過呼叫有名稱的儲存過程來復用**塊。

2.格式:

create [or replace] procedure 名稱[(引數1 型別,引數2 型別 , ...)]

is|as 

--變數宣告區間

begin

--業務邏輯區間

end;

/

3.儲存過程的呼叫

(1)直接呼叫

call 儲存過程名(有參傳參);

(2)plsql呼叫

begin

儲存過程名(有參傳參);

end;

--練習:使用儲存過程輸出顯示helloword

create or replace procedure pro_d

isbegin

dbms_output.put_line('helloworld');

end;

/  begin

pro_d();

end;

/

--練習:定義乙個儲存過程輸出引數內容

create or replace procedure pro_out(idc number)

is s number(4):=5;

begin

s:=s+idc;

dbms_output.put_line(s);

end;

/  begin    

pro_out(5);

end;

/--練習,使用儲存過程,獲取某一員工的編號對應的姓名和職位

create or replace procedure pro_equ(eno number)

isena emp.ename%type;

ejob emp.job%type;

begin

select ename,job into ena,ejob from emp where empno=eno;

dbms_output.put_line(ena||'----'||ejob);

end;

/ begin

pro_equ(7369);

end;

/--練習,傳入乙個部門編號,查詢部門的總工資

create or replace procedure pro_ssal(dno number)

iss emp.sal%type; 

begin

select sum(sal) into s from emp where deptno=dno;

dbms_output.put_line(s);

end;

/ begin

pro_ssal(10);

end;

/

4.儲存過程可以使用引數返回資料,特點:此時引數需要一些屬性(in |out |in out)。

in表示引數只能傳入 不能輸出(預設狀態下屬性為in)

out表示引數只能用於輸出

in out 表示引數可以傳入傳出

格式 :引數名 [in|out|in out] 型別

--練習 :傳入兩個引數,計算兩個數的和與差

create or replace procedure pro_sum(a in number,b in number,s out number)

isbegin

s:=a+b;

end;

/ declare

total number(8);  

begin

pro_sum(4,5,total);

dbms_output.put_line(total);

end;

/ --練習:建立乙個儲存過程,完成臨時表的資訊存入dept表中,

--      然後刪除臨時表資料

drop table dept_bak;

create table dept_bak(

deptno number(4),

dname varchar2(20),

loc varchar2(50)

);insert into dept_bak values(11,'a','b');

insert into dept_bak values(12,'c','d');

insert into dept_bak values(13,'e','f');

commit;

select * from dept_bak;

--編寫儲存過程

--使用行變數接收臨時表的資料,同時完成對錶的資料插入

create or replace procedure pro_copy

iscursor c is select * from dept_bak;

begin

for rowbak in c loop

insert into dept values(rowbak.deptno,rowbak.dname,rowbak.loc);

end loop;

delete from dept_bak;

commit;

end;

/  begin

pro_copy();

end;

/    

--練習:返回a和b的和與差

create or replace procedure pro_com(a in number,b in number,s out number,c out number)

isbegin

s:=a+b;

c:=a-b;

end;

/  set serveroutput on;

declare

s1 number(8);

s2 number(8); 

begin

pro_com(8,6,s1,s2);

dbms_output.put_line(s1);

dbms_output.put_line(s2);

end;

/

二十二 Oracle學習筆記 Oracle異常

一 oralce異常 1.oracle低層定義了很多異常,每個異常都有乙個唯一的編碼,這些異常之中,有一些是比較常見的,oracle 給這些異常定義了名稱,可以直接使用,其他沒有名稱只有編碼的不能直接使用。2.異常的分類 1 預定義異常 既有編碼又有名稱的異常是預定義異常,此類異常可以直接使用 2 ...

商業保理學習筆記

一 定義 商業保理是債權人將應收賬款轉讓給保理機構或銀行等金融機構的一種融資方式,是一種債權的轉讓行為,是債權的買斷。二 1 與質押的區別 質押的債權債務關係未發生改變,債權仍歸屬於出質人所有。保理的債權債務關係發生了變化,債權歸屬於保理公司或金融機構 2 與 鏈金融的關係 鏈金融是商業保理的延伸,...

OpenGL學習筆記(二十)

片段著色器中,內建gl fragcoord向量的z值包含了那個特定片段的深度值。如果我們將這個深度值輸出為顏色,就可以顯示場景中所有片段的深度值。我們可以根據片段的深度值返回乙個顏色向量來完成這一工作 void main 如果執行程式的話,會注意到所有東西都是白色的,看起來就像所有的深度值都是最大的...