连续写了两篇文章,实在写的头疼,所以此刻出去溜个弯,就着春风的惬意,舒缓一下大脑,来写下面的内容,于是我提笔就开始,生怕错过了下面的时间而耽误了我回去的事情,毕竟嘛,春节到了,该回家了(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(存储过程使用)
begin