`

Oracle PL/SQL笔记

阅读更多
declare
  v_first_name varchar2(35);
  v_last_name varchar2(35);
  c_student_id constant number := 2223;
begin
  select first_name, last_name
  into v_first_name, v_last_name
  from student
  where student_id = c_student_id;
  
  dbms_output.put_line('Student name: ' || v_first_name || ' ' || v_last_name);
exception 
  when no_data_found then
       dbms_output.put_line('There is no student with student id '||c_student_id);
end;



BEGIN
   INSERT INTO ZIPCODE (zip, city, state, created_by, created_date,   
      modified_by, modified_date)
   VALUES ('10027', 'NEW YORK', 'NY', USER, SYSDATE, USER, SYSDATE);
   COMMIT;
EXCEPTION
   WHEN OTHERS THEN
      DECLARE
         v_err_code NUMBER := SQLCODE;
         v_err_msg VARCHAR2(100) := SUBSTR(SQLERRM, 1, 100);
      BEGIN
         DBMS_OUTPUT.PUT_LINE ('Error code: '||v_err_code);
         DBMS_OUTPUT.PUT_LINE ('Error message: '||v_err_msg);
      END;
END;


declare 
  --rowtype:行记录类型
  vr_student student%rowtype;
begin
  select *
  into vr_student
  from student
  where student_id = 156;
  
  --用“.”来访问行记录属性
  dbms_output.put_line(vr_student.first_name || ' ' || vr_student.street_address || ' has an ID of 156');
exception
  when no_data_found then
       raise_application_error(-20001,'the student is not in the database');
end;

declare 
       cursor c_zip is  -- 声明游标
       select * 
       from zipcode;
       
       vr_zip c_zip%rowtype; --游标行类型
begin
       open c_zip;  --打开游标
       loop
            fetch c_zip into vr_zip; --对游标集合内的每个数据行操作
            exit when c_zip%notfound;
            dbms_output.put_line(vr_zip.city);
       end loop; -- loop结束,自动关闭游标
end;


DECLARE
   v_sid      student.student_id%TYPE;
   CURSOR c_student IS
      SELECT student_id
        FROM student
       WHERE student_id < 110;
BEGIN
   OPEN c_student;
   LOOP
      FETCH c_student INTO v_sid;
      EXIT WHEN c_student%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE('STUDENT ID : '||v_sid);
   END LOOP;
   CLOSE c_student;
 EXCEPTION
   WHEN OTHERS
   THEN
      IF c_student%ISOPEN
      THEN
         CLOSE c_student;
      END IF;
END;


DECLARE
   CURSOR c_student_enroll IS
      SELECT s.student_id, first_name, last_name,
             COUNT(*) enroll,
             (CASE  
                  WHEN count(*) = 1 Then ' class.'
                  WHEN count(*) is null then 
                               ' no classes.'
                  ELSE ' classes.'
              END) class                     
        FROM student s, enrollment e
       WHERE s.student_id = e.student_id
         AND s.student_id <110
       GROUP BY s.student_id, first_name, last_name;
   r_student_enroll    c_student_enroll%ROWTYPE;
BEGIN
   OPEN c_student_enroll;
   LOOP
      FETCH c_student_enroll INTO r_student_enroll;
      EXIT WHEN c_student_enroll%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE('Student INFO: ID '||
         r_student_enroll.student_id||' is '||
         r_student_enroll.first_name|| ' ' ||
         r_student_enroll.last_name||
         ' is enrolled in '||r_student_enroll.enroll||
         r_student_enroll.class);
   END LOOP;
   CLOSE c_student_enroll;
EXCEPTION
   WHEN OTHERS
   THEN
    IF c_student_enroll %ISOPEN
      THEN
    CLOSE c_student_enroll;
    END IF;
END;


DECLARE
   CURSOR c_group_discount IS
      SELECT DISTINCT s.course_no 
        FROM section s, enrollment e
       WHERE s.section_id = e.section_id
        GROUP BY s.course_no, e.section_id, s.section_id
       HAVING COUNT(*)>=8;
BEGIN
   FOR r_group_discount IN c_group_discount   LOOP
      UPDATE course
         SET cost = cost * .95
       WHERE course_no = r_group_discount.course_no;
   END LOOP;
   COMMIT;
END;

DECLARE
   CURSOR c_group_discount IS
      SELECT DISTINCT s.course_no 
        FROM section s, enrollment e
       WHERE s.section_id = e.section_id
        GROUP BY s.course_no, e.section_id, s.section_id
       HAVING COUNT(*)>=8;
   v_course_no c_group_discount%rowtype;
BEGIN
   open c_group_discount;
   LOOP
      fetch c_group_discount into v_course_no;
      UPDATE course
         SET cost = cost * .95
       WHERE course_no = v_course_no.course_no;
   END LOOP;
   COMMIT;
END;

select count(*) from student;
select * from student;
select * from student where created_by = 'xls';

create or replace trigger student_bi
before insert on student
for each row
declare
    v_student_id student.student_id%type;
begin
    select student_id_seq.nextval
    into v_student_id
    from dual;
    :new.student_id := v_student_id;
    :new.created_by := user;
    :new.created_date := sysdate;
    :new.modified_by := user;
    :new.modified_date := sysdate;
end;

INSERT INTO student (student_id, first_name, last_name, zip,  
   registration_date, created_by, created_date, modified_by,   
   modified_date)
VALUES (STUDENT_ID_SEQ.NEXTVAL, 'John', 'Smith', '00914', SYSDATE,  
   USER, SYSDATE, USER, SYSDATE);
   

INSERT INTO student (first_name, last_name, zip, registration_date)
VALUES ('John', 'Smith', '00914', SYSDATE);

create or replace trigger instructor_aud
after update or delete on instructor
declare
      v_type varchar2(10);
      pragma autonomous_transaction;
begin
      if UPDATING then
         v_type := 'UPDATE';
      elsif deleting then
         v_type := 'DELETE';
      end if;
      
      update statistics
      set transaction_user = user,
          transaction_date = sysdate
      where table_name = 'INSTRUCTOR'
            and transaction_name = v_type;
      
      if sql%notfound then
         insert into statistics 
         values('INSTRUCTOR', v_type, user, sysdate);
      end if;
      
      commit;
end;

UPDATE instructor
   SET phone = '7181234567'
 WHERE instructor_id = 101;

          
SELECT * 
  FROM statistics;
























分享到:
评论

相关推荐

    ORACLE PL/SQL从入门到精通

    ORACLE PL/SQL是从入门到精通的专业知识,涵盖了数据库开发与管理的多个方面,包括触发器、过程、函数、软件包、异常处理、游标、循环、分支、变量使用、数据库安装等关键知识点。 触发器是数据库中用来保证数据...

    oracle 9i pl/sql程序设计笔记

    ### Oracle 9i PL/SQL程序设计笔记精要 #### PL/SQL基础知识概览 **标题与描述**:本文档围绕“Oracle 9i PL/SQL程序设计笔记”这一核心主题,深入探讨了PL/SQL语言的基础知识及其在Oracle 9i数据库环境中的应用。...

    pl/sql学习笔记

    以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...

    PL/SQL笔记pl/sql笔记

    PL/SQL是Oracle数据库的一种编程语言,它结合了SQL(结构化查询语言)与过程编程语言的功能,使得数据库管理和应用程序开发更加便捷。本篇笔记主要涵盖了PL/SQL的基础语法和常用操作,包括检索数据、操纵数据以及SQL...

    PL/SQL学习笔记

    PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行代码。PL/SQL可以处理复杂的数据操作和业务逻辑,支持编程结构如循环、...

    pl/sql个人笔记.

    ### PL/SQL 个人笔记详解 #### 一、PL/SQL 块中可嵌入的 SQL 语句类型 PL/SQL(程序化SQL)是Oracle数据库的标准编程语言,它扩展了SQL的功能,允许在数据库环境中编写过程化的业务逻辑。在PL/SQL中,可以嵌入多种...

    pl/sql笔记

    PL/SQL(Procedural Language for SQL)是Oracle数据库系统中的一种过程化编程语言,它结合了SQL的数据处理能力与传统过程化语言的控制结构,使得在数据库内部进行复杂逻辑处理成为可能。以下是PL/SQL能够实现的主要...

    pl/sql数据库学习笔记

    PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量(初始值是多少,最终值...

    oracle笔记pl/sql流程控制

    oracle笔记pl/sql流程控制,有具体的代码案例,流程控制的知识点笔记!

    PL/SQL学习教程,附笔记

    PL/SQL,全称是Procedural Language/Structured Query Language,是Oracle数据库提供的一种结合了SQL语言和过程式编程的编程环境。它扩展了SQL的功能,使得开发人员能够编写复杂的数据库应用程序,处理事务、实现...

    oracle/SQL和PL/SQL课堂笔记

    Oracle SQL和PL/SQL是数据库管理和编程的重要工具,主要用于处理Oracle数据库中的数据。这篇课堂笔记主要涵盖了基础的SQL查询语法和部分PL/SQL概念。 首先,SQL查询的基础是从数据库中选择数据。`SELECT`语句用于...

    PL/SQl超级笔记

    总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...

    pl/sql培训笔记

    ### PL/SQL培训笔记知识点概览 #### 一、PL/SQL简介与结构 PL/SQL,即Procedural Language for SQL,是Oracle数据库的一种内嵌式编程语言,结合了SQL的数据操作能力和过程化编程语言的控制结构。它提供了一种高效、...

    PL/SQL听课笔记

    ### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL)是一种专门为Oracle数据库设计的过程化语言扩展。它是在标准SQL基础上增加了一系列高级编程特性,如变量、控制结构、函数、...

    我的PL/SQL学习笔记(一)

    在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...

    PL/SQL Developer 12.0

    PL/SQL Developer 12.0 数据库轻量工具功能区用户界面PL/SQL 开发人员现在使用新的功能区用户界面,而不是菜单用户界面:功能区上方的快速访问工具栏包含最常用的功能,因此它们始终立即可用。您可以根据自己的喜好...

Global site tag (gtag.js) - Google Analytics