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

📄 createnonmutating.sql

📁 介绍Oracle PL SQL编程
💻 SQL
字号:
/* * createNonMutating.sql * Chapter 10, Oracle10g PL/SQL Programming * by Ron Hardman, Michael McLaughlin and Scott Urman * * This script demonstrates user defined package and triggers. */SET ECHO ONCREATE OR REPLACE PACKAGE StudentData AS  TYPE t_Majors IS TABLE OF students.major%TYPE    INDEX BY BINARY_INTEGER;  TYPE t_IDs IS TABLE OF students.ID%TYPE    INDEX BY BINARY_INTEGER;  v_StudentMajors t_Majors;  v_StudentIDs    t_IDs;  v_NumEntries    BINARY_INTEGER := 0;END StudentData;/show errorsCREATE OR REPLACE TRIGGER RLimitMajors  BEFORE INSERT OR UPDATE OF major ON students  FOR EACH ROWBEGIN  /* Record the new data in StudentData. We don't make any     changes to students, to avoid the ORA-4091 error. */  StudentData.v_NumEntries := StudentData.v_NumEntries + 1;  StudentData.v_StudentMajors(StudentData.v_NumEntries) :=     :new.major;  StudentData.v_StudentIDs(StudentData.v_NumEntries) := :new.id;END RLimitMajors;/CREATE OR REPLACE TRIGGER SLimitMajors  AFTER INSERT OR UPDATE OF major ON studentsDECLARE  v_MaxStudents     CONSTANT NUMBER := 2;  v_CurrentStudents NUMBER;  v_StudentID       students.ID%TYPE;  v_Major           students.major%TYPE;BEGIN  /* Loop through each student inserted or updated, and verify     that we are still within the limit. */  FOR v_LoopIndex IN 1..StudentData.v_NumEntries LOOP    v_StudentID := StudentData.v_StudentIDs(v_LoopIndex);    v_Major := StudentData.v_StudentMajors(v_LoopIndex);    -- Determine the current number of students in this major.    SELECT COUNT(*)      INTO v_CurrentStudents      FROM students      WHERE major = v_Major;    -- If there isn't room, raise an error.    IF v_CurrentStudents > v_MaxStudents THEN      RAISE_APPLICATION_ERROR(-20000,         'Too many students for major ' || v_Major ||        ' because of student ' || v_StudentID);    END IF;  END LOOP;  -- Reset the counter so the next execution will use new data.  StudentData.v_NumEntries := 0;END SLimitMajors;/

⌨️ 快捷键说明

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