oracle簡單的儲存過程和函式以及觸發器的使用

2021-08-15 13:05:25 字數 4894 閱讀 8312

連續寫了兩篇文章,實在寫的頭疼,所以此刻出去溜個彎,就著春風的愜意,舒緩一下大腦,來寫下面的內容,於是我提筆就開始,生怕錯過了下面的時間而耽誤了我回去的事情,畢竟嘛,春節到了,該回家了(15個例子)。

1.create or replace function fun_prac(id number)(函式的使用)

return varchar2

isbegin

dbms_output.put_line('這是第乙個函式');

return 'id的值是:'||id;

end;

2.--定義乙個函式,獲取給定部門的工資總和,要求:部門號定義為引數,工資總額定義為返回值

create or replace function sum_emp_sal(dno number)(函式的使用)

return number

isv_sal emp.sal%type;

begin

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

return v_sal;

end;

3.----刪除資料之後然後備份資料到另外乙個表中

create or replace trigger backup_data(觸發器的使用)

after delete on emp

for each row

begin

insert into emptest values(:old.empno,:old.ename,:old.job,:old.mgr,:old.hiredate,:old.sal,:old.comm,:old.deptno) ;

end;

4.查詢某個部門的員工工資總和

create or replace function ls_sum_emp_sal(dno number,sum_empno_account out number)(函式的使用)

return number

issum_sal number(10):=0;

cursor emp_cursor is select sal from emp where deptno=dno;--定義游標查詢每個部門下每個員工的工資

begin

sum_empno_account:=0;

for v_sal in emp_cursor loop

sum_sal:=sum_sal+v_sal.sal;

sum_empno_account:=sum_empno_account+1;

end loop;

return sum_sal;

end;

5.求1到100的和用for in loop 迴圈(函式的使用)

create or replace function sum_count

return number

is ---定義變數

v_sum number(10):=0;

begin

for v_temp in 1..100 loop

v_sum:=v_sum+v_temp;

end loop;

return v_sum;

end;

6. loop  exit when 求1到100的和(函式的使用)

create or replace function sum_count1

return number

isv_sum number(10):=0;

v_a number(10);

begin

v_a:=1;

loop

v_sum:=v_sum+v_a;

v_a:=v_a+1;

exit when v_a>100;

end loop;

return v_sum;

end;

7.while loop 求1到100的和(函式的使用)

create or replace function sum_count2

return number

isv_sum number(10):=0;

v_a number(10);

begin

v_a:=0;

while v_a<=100 loop

v_sum:=v_sum+v_a;

v_a:=v_a+1;

end loop;

return v_sum;

end;

8.動態更新sql(儲存過程的使用)

create or replace procedure proc_update1(sno number,sname varchar2) as

mysql varchar2(500);  

begin  

mysql:='update student set sname=:1 where sno=:2';  

execute immediate mysql using sname,sno;  

end proc_update1;

9.往學生表中插入1000條資料(儲存過程的使用)

create or replace procedure proc_while_insert(v_typ varchar2) is

cnt number;

begin

for r in 1 ..1000 loop

insert into student (sno,sname)

select 'st'||r ,'測試'||r from dual;

end loop;

exception

when no_data_found

then

dbms_output.put_line('資料不存在');       

end;

10.儲存過程游標的使用

create or replace procedure pro_add_sal(dno number,total_sal out number) is(儲存過程的使用)

---乙個部門下有多個員工,所以需要定義游標

cursor emp_cursor is select sal,hiredate from emp where deptno=dno;

v_temp number(5,2);

begin

---使用for in 迴圈

total_sal:=0;

for v_result in emp_cursor loop

if to_char(v_result.hiredate,'yyyy')<'1995' then v_temp:=0.05;

elsif to_char(v_result.hiredate,'yyyy')<1998 then v_temp:=0.03;

else v_temp:=0.01;

end if;

total_sal:=total_sal+v_result.sal*v_temp;

update emp set sal=sal*(1+v_temp) where deptno=dno;

end loop;

end;

11.儲存過程的更新和查詢語句

create or replace procedure update_emp(v_empno number,v_result out number) is(存出過程的使用)

begin

update emp set sal=100 where empno=v_empno;

select sal into v_result from emp where empno=v_empno;

end update_emp;

12.插入emp表資料時觸發(觸發器的使用)

create or replace trigger insert_prac

after insert on emp

for each row

begin

insert into emptest(empno,ename,job) values(:new.empno,:new.ename,:new.job);

end;

13.更新emp表的時候觸發(觸發器的使用)

create or replace trigger update_prac

after update on emp

for each row

begin

update emptest set empno=:new.empno;

end;

14.create or replace procedure proc_selectall(cno in number,s_result out sys_refcursor) is(儲存過程使用)

cnt number;

begin

select sno into cnt from student where sno=cno;

if cnt>0 then

open  s_result for  

select  * from student  where sno=cno;

else 

open  s_result for  

select  * from  student;

end if;

exception

when no_data_found

then

dbms_output.put_line('資料不存在');     

end proc_selectall;

15.儲存過程的刪除語句

create or replace procedure proc_delete(cno in number) is(儲存過程使用)

begin

delete from student where sno=cno;

end proc_delete;

簡單的oracle儲存過程

1 oracle儲存過程以及 asp.net 中呼叫儲存過程,實現乙個簡單的登入功能,只是作為學習的,所以處理可能不太合理。在pl sql developer 中編寫儲存過程 新建procedures 乙個簡單的登入檢查儲存過程 如下 create or replace procedure user...

oracle函式和儲存過程簡單例項

1.函式 1 建立函式 create or replace function get tax x number return number as begin declare y number begin y x 2000 if x 0 then return 0 end if return y 5 ...

mysql過程函式 mysql 儲存過程和函式

乙個儲存程式是可以被儲存在伺服器中的一套sql語句。可以通過客戶端用create procedure和create function 建立乙個儲存過程或函式。在客戶端通過call語句 呼叫所建立的存數過程或函式。語法 建立儲存子程式 create procedure sp name proc par...