連續寫了兩篇文章,實在寫的頭疼,所以此刻出去溜個彎,就着春風的愜意,舒緩一下大腦,來寫下面的內容,於是我提筆就開始,生怕錯過了下面的時間而耽誤了我回去的事情,畢竟嘛,春節到了,該回家了(15個例子)。
1.create or replace function fun_prac(id number)(函數的使用)
return varchar2
is
begin
dbms_output.put_line('這是第一個函數');
return 'id的值是:'||id;
end;
2.--定義一個函數,獲取給定部門的工資總和,要求:部門號定義爲參數,工資總額定義爲返回值
create or replace function sum_emp_sal(dno number)(函數的使用)
return number
is
v_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
is
sum_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
is
v_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
is
v_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(存儲過程使用)
begindelete from student where sno=cno;
end proc_delete;