⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 章猛.txt

📁 关于oracle和sql的书籍和ppt教程,非常好,本人珍藏品
💻 TXT
字号:
1:把咱们练习(6月8号)里面写到的过程和函数放到包里进行管理,然后调用测试
1.1:

create or replace package p_zm
is
 function sum_n(n number)
      return number;
 function no_re_sal(f_empno number)
      return number;
 procedure up_emp(up_no number,up_sal number);
end p_zm;

1.2:
create or replace package body p_zm
is
  function sum_n(n number)
        return number
  is
    renn number :=1;
     n_sum number :=0;
     n_error exception;
 begin
    if n<=0 then
      raise n_error;
    end if;
    while renn <= n loop
       n_sum:=renn+n_sum;
       renn:=renn+1;
    end loop;
    return n_sum;
 exception
    when n_error then
      dbms_output.put_line('输入错误');
      return null;
 end sum_n;
    -----------------------------------------
 function no_re_sal(f_empno number)
     return number
 is
     f_sal number(8,2);
 begin
   select sal into f_sal from zmemp where empno=f_empno;
   return f_sal;
 exception
   when no_data_found then
      dbms_output.put_line('该员工不存在');
      return null;
 end no_re_sal;
 -------------------------------------------------
 procedure up_emp(up_no number,up_sal number)
 is
 begin
  update zmemp set sal = up_sal where empno = up_no;
  commit;
end up_emp;
begin
null;
end;


2:(把昨天最后一道题写出来)


create or replace trigger u_ztemp
instead of insert
on v_ztemp
for each row
declare
   m_id number;
begin
   select max(id) into m_id from ztemp;
   dbms_output.put_line(m_id);
  
if m_id is null then
     insert into ztemp values(:new.name,:new.age,1);
   else
      insert into ztemp values(:new.name,:new.age,m_id+1);
   end if;
  
end;


4:自己写一个应用的例子,这个例子里面用到游标,过程(把写的游标放到过程里),触发器(把过程	放到触发器里),题目不限,自己想象

当delete某位老师的编号id时,将该老师领导的学生的LID改为空,同时打印出这些学生的信息。
create or replace trigger zmm
after delete on teacher
for each row
  declare
    procedure mmz(cc number)
    is
      cursor c1 is select * from student where lid=cc;
    begin
      dbms_output.put_line('老师'||cc||'离职,其学生');
      dbms_output.put_line('******************************************');
      for c_c in c1 loop
         dbms_output.put_line(c_c.id||'    '||c_c.name);
      end loop;
       dbms_output.put_line('******************************************');
      dbms_output.put_line('现在没老师带');
    end;
begin 
    mmz(:old.tid);
    update student set lid=null where lid=:old.tid;

   
end;










3:把刚才的例子敲一遍
create or replace package my_pkgz
 is 
 pragma serially_reusable;
   v_deptrec dept%rowtype;
   v_sqlcode number;
   v_sqlerrm varchar2(2048);
   function add_dept(v_deptno number,
                     v_deptname varchar2,
                     v_deptloc varchar2)
             return number;
    function remove_dept(v_deptno number)
             return number;
    procedure query_dept(v_deptno number);
    procedure read_dept; 
 end my_pkgz;

create or replace package body my_pkgz
 is
 pragma serially_reusable;
    v_flag number;
    cursor mycursor is
      select deptno,dname from dept;
      --------------------------------------私有函数
    function check_dept(v_deptno number)
      return number
    is
    begin
      select count(*) into v_flag from dept
      where deptno=v_deptno;
      if v_flag>0 then
         v_flag :=1;
      end if;
      return v_flag;
    end check_dept;
      ---------------------------------------公有函数
     function add_dept(v_deptno number,
                       v_deptname varchar2,
                       v_deptloc varchar2)
          return number
     is
     begin
        if check_dept(v_deptno) =0 then
           insert into dept
           values(v_deptno,v_deptname,v_deptloc);
           return 1;
        else
           return 0;
        end if;
     exception
        when others then
           v_sqlcode :=sqlcode;
           v_sqlerrm :=sqlerrm;
           return -1;
     end add_dept;
     ----------------------------------------
     function remove_dept(v_deptno number)
         return number
     is
     begin
         if check_dept(v_deptno)=1 then
            delete from dept where deptno =v_deptno;
            return 1;
         else
            return 0;
         end if;
     exception
         when others then
            v_sqlcode :=sqlcode;
            v_sqlerrm :=sqlerrm;
            return -1;
     end remove_dept;
     --------------------------------------------
     procedure query_dept(v_deptno number)
     is
     begin
         if check_dept(v_deptno) = 1 then
            select * into v_deptrec from dept
            where deptno=v_deptno;
         end if;
     exception
          when others then
             v_sqlcode :=sqlcode;
             v_sqlerrm :=sqlerrm;
     end query_dept;
     -------------------------------------------
     procedure  read_dept
     is 
         v_deptno number;
         v_dname varchar2(14);
     begin
         for c_mycursor in mycursor loop
             v_deptno :=c_mycursor.deptno;
             v_dname :=c_mycursor.dname;
             dbms_output.put_line(v_deptno||'   '||v_dname);
         end loop;
     end read_dept;
 begin
    v_sqlcode :=null;
    v_sqlerrm :='初始化消息文本';
 end my_pkgz;


5每人对6,7章学的内容做一个总结(包含讲了那些内容,自己掌握了多少等等)

 第六章主要是SQL语言基础,包括基本查询,分组查询,连接查询和事物的控制以及SQL函数,其中连接查询是比较复杂而且容易出错的地方。
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -