`

plsql包、触发器和大对象操作

阅读更多

703

----------------------------------包package-------------------------------------
--Package概念:按照业务逻辑、把相关的Func , Procedure 组织到一起,形成一个函数或者过程集合
--package组成:包说明(package specification)、包体(package body)
--package好处:
  1、模块化:一般把有相关性的函数和过程放到一个Package中;
  2、易设计:可以把包说明和包体分别编写和编译,先编写和编译包说明部分,在编写和说明包体部分;这             有利于分工合作;
  3、信息隐藏:包体中函数可以部分出现在包说明中,只有出现在包说明中的函数和过程才是该Package的               公有函数和过程,可以被其他包中的函数调用,否则对其他包中的函数是不可见的,未在包说             明部分出现的函数和过程相当于私有的。
  4、加载性能提高:当Package中有一个函数或过程被调用时,整个Packege就被加载到内存中,这样当该
                 Package中其他函数被调用时,就直接从内存读取了,可以减少磁盘IO,从而提高性能。这                  个特性也提醒我们不要去搞巨无霸的Package, 把你用到的任何函数都写到一个Package中                 这会导致严重的内存浪费。
  5、重载:一个package 中可以定义同名、不同参数的函数或过程。
--package向前声明特性
  在Package body中,一个函数中调用另一个函数(也在该Package中),则另一个函数必须在前面先定义;  如果你非要调用在程序代码中后定义的函数,可把这个函数设置成公有函数,在包说明部分说明;
--初始化过程代码
   session加载时被执行一次
   一般用于一些复杂变量的初始化(比如某个公有变量的初始化值是需要通过一段负责的SQL来获取的)
   不需要则NULL
--package中的变量的持久化状态
   package中的各个变量,不同的session不会相互影响。
---------------------------------------------------------------------------------

------------------------------------内置SQL工具包-------------------------------

---DBMS_SQL 动态SQL
1、DBMS_SQL
CREATE OR REPLACE PROCEDURE delete_all_rows(p_tab_name IN VARCHAR2,
                                            p_rows_del OUT NUMBER) IS
  cursor_name INTEGER;
BEGIN
  cursor_name := DBMS_SQL.OPEN_CURSOR;
  DBMS_SQL.PARSE(cursor_name,
                 'DELETE FROM ' || p_tab_name,
                 DBMS_SQL.NATIVE);
  p_rows_del := DBMS_SQL.EXECUTE(cursor_name);
  DBMS_SQL.CLOSE_CURSOR(cursor_name);
END;
2、EXECUTE IMMEDIATE
CREATE PROCEDURE del_rows(p_table_name IN VARCHAR2, p_rows_deld OUT NUMBER) IS
BEGIN
  EXECUTE IMMEDIATE 'delete from ' || p_table_name;
  p_rows_deld := SQL%ROWCOUNT;
END;


--DBMS_DDL 程序中执行DDL

1、在程序中执行编译命令
  DBMS_DDL.ALTER_COMPILE('PROCEDURE','A_USER','QUERY_EMP')
2、在程序中执行数据收集命令
  DBMS_DDL.ANALYZE_OBJECT('TABLE','A_USER','JOBS','COMPUTE')



--DBMS_JOB 定义job定期执行某个程序

job的定义、提交、更改、停止、移除

DECLARE
  jobno NUMBER;
BEGIN
  DBMS_JOB.SUBMIT(job       => jobno,
                  what      => 'OVER_PACK.ADD_DEPT(''EDUCATION'',2710);',
                  next_date => TRUNC(SYSDATE + 1),
                  interval  => 'TRUNC(SYSDATE + 1)');
  dbms_output.put_line(‘job_no = ‘ || jobno) COMMIT;
END;

查找自己提交的job号

SELECT job, log_user, next_date, next_sec, broken, what FROM DBA_JOBS;

--UTL_FILE 读写外部文件

。。。。。

-----------------------------------------------------------------------------------


--------------------------------------plsql中大对象的操作---------------------------

--oracle数据库中的lob类型:

1、CLOB :字符大对象,存储在数据库内部;
2、NCLOB:多字节字符大对象,存储在数据库内部;
3、BLOB:二进制大对象,存储在数据库内部;
4、BFILE:二进制文件,存储在数据库外部;

--内部LOB的一般操作步骤

1、在表中添加LOB类型的列
2、在程序中声明和初始化LOB的Locator
3、使用SELECT FOR UPDATE 锁定目标行,准备更新行上的LOB列(LOB的Locator)
4、生成LOB对象,可使用DBMS_LOB 这样的PLSQL包,也可以使用OCI,JDBC等;
5、Commit 提交更改;

--外部LOB BFILE的操作

Bfile是数据库外部文件,在数据库表上这种类型的字段实际只是存储一个Locator

Bfile的使用限制:Bfile是数据库外部文件,是只读的,所以不参与事务操作;用户必须先创建文件并放到
特定的目录下,给予Oracle进程以目录和文件的读取权限;

--oracle directory
  控制Bfile存储的安全性
使用Bfile的一般步骤:
    1、在操作系统上创建目录,并给Oracle数据库进程赋予阅读权限,把外部文件放入这个目录
    2、在Oracle数据库中表添加Bfile类型字段
    3、在Oracle 数据库中创建Directory 对象
       CREATE DIRECTORY dir_name AS os_path;
    4、授权读权限给特定的数据库用户
       GRANT READ ON DIRECTORY dir_name TO user|role|PUBLIC;
    5、往表中插入数据时使用BFILENAME 函数,它可以关联外部文件和表上的Bfile列
    6、在程序中声明和初始化LOB的Locator
    7、Select 指定行上Bfile 列到Locator
    8、使用DBMS_LOB 或者通过OCI 读取Bfile (使用Locator作为文件的一个引用)

--DBMS_LOB
  1、更改LOB的值: APPEND, COPY, ERASE, TRIM, WRITE, LOADFROMFILE
  2、读取、检查LOB的值: GETLENGTH, INSTR, READ, SUBSTR
  3、Bfile专用:FILECLOSE, FILECLOSEALL, FILEEXISTS, FILEGETNAME, FILEISOPEN, FILEOPEN
---------------------------------------------------------------------------------------

-------------------------------------oracle触发器trigger-------------------------------
--关键因素
时机:Before 或者After 或Instead of
事件:Insert 或Update 或Delete
对象:表名(或视图名)
类型:Row 或者Statement级;
条件:满足特定Where条件才执行;
内容:通常是一段PLSQL块代码;

-Instead of : 用Trigger的内容替换事件本身的动作
-Row级:SQL语句影响到的每一行都会引发Trigger
-Statement级:一句SQL语句引发一次,不管它影响多少行(甚至0行)


--创建statement级别Trigger语法
CREATE [OR REPLACE] TRIGGER trigger_name
    timing
       event1 [OR event2 OR event3]
          ON table_name
trigger_body

CREATE OR REPLACE TRIGGER secure_emp
  BEFORE INSERT OR UPDATE OR DELETE ON employees
BEGIN
  IF (TO_CHAR(SYSDATE, 'DY') IN ('SAT', 'SUN')) OR
     (TO_CHAR(SYSDATE, 'HH24') NOT BETWEEN '08' AND '18') THEN
    IF DELETING THEN
      RAISE_APPLICATION_ERROR(-20502,
                              'You may delete from EMPLOYEES
table only during business hours.');
    ELSIF INSERTING THEN
      RAISE_APPLICATION_ERROR(-20500,
                              'You may insert into
EMPLOYEES table only during business hours.');
    ELSIF UPDATING('SALARY') THEN
      RAISE_APPLICATION_ERROR(-20503,
                              'You may update
SALARY only during business hours.');
    ELSE
      RAISE_APPLICATION_ERROR(-20504,
                              'You may update
EMPLOYEES table only during normal hours.');
    END IF;
  END IF;
END;

--创建row级别trigger

CREATE [OR REPLACE] TRIGGER trigger_name
  timing
     event1 [OR event2 OR event3]
       ON table_name
     [REFERENCING OLD AS old | NEW AS new]
   FOR EACH ROW
[WHEN (condition)]
trigger_body

CREATE OR REPLACE TRIGGER audit_emp_values
  AFTER DELETE OR INSERT OR UPDATE ON employees
  FOR EACH ROW
BEGIN
  INSERT INTO audit_emp_table
    (user_name,
     timestamp,
     id,
     old_last_name,
     new_last_name,
     old_title,
     new_title,
     old_salary,
     new_salary)
  VALUES
    (USER,
     SYSDATE,
     :OLD.employee_id,
     :OLD.last_name,
     :NEW.last_name,
     :OLD.job_id,
     :NEW.job_id,
     :OLD.salary,
     :NEW.salary);
END;

--INSTEAD OF Trigger












分享到:
评论

相关推荐

    PLSQL触发器.pdf

    触发器是 Oracle 中的一种特殊对象,它可以在特定的事件发生时自动执行某些操作。触发器可以分为两种:语句级触发器和行级触发器。语句级触发器是指当执行 DML 语句时,以语句为单位执行的触发器,即语句执行一次,...

    PLSQL Developer 8.0汉化包

    这个8.0版本的汉化包是专为那些需要中文界面的用户设计的,使得国内用户在使用PLSQL Developer时能更加方便地理解和操作。 PLSQL Developer的主要特点包括: 1. **代码编辑器**:提供了智能感知功能,可以自动完成...

    PLSQL 操作学习文档

    12. **数据库对象的操作**:学习如何通过PLSQL操作表、视图、索引、触发器等数据库对象。 在“精通Oracle.10g.Pl.SQL编程.pdf”这份文档中,可能会深入讲解Oracle 10g版本下的PLSQL编程,包括更多的高级特性、最佳...

    PLSQL笔记-从hello word到触发器,包,游标高级应用

    本笔记集合将带你从基础入门到深入掌握PLSQL的核心概念和技术,包括“Hello World”式的简单示例,触发器的使用,以及包和游标的高级应用。 首先,让我们从"Hello World"开始。在PLSQL中,你可以创建一个简单的存储...

    PLSQL Developer汉化包

    3. **对象浏览器**:可以浏览和管理数据库中的所有对象,如表、视图、存储过程、触发器等,方便进行数据查询和对象操作。 4. **数据导入导出**:支持数据的导入和导出功能,方便数据迁移或备份。 5. **报表生成器*...

    PLSQL带中文包

    - PL/SQL编辑器:提供代码折叠、断点设置、调试器等,便于开发和调试存储过程、函数和触发器。 - 数据浏览和操作:可以直接在工具中查看和修改数据库中的数据,支持表格、网格和文本视图。 - 图形化对象浏览器:可以...

    PLSQL12汉化包

    在PLSQL Developer 12.0版本中,为满足中国用户的需求,官方提供了汉化包,使得用户能够以中文界面进行操作,提高工作效率。这款汉化包确保了全中文的界面,避免了半汉化的问题,让用户在使用过程中更加得心应手。 ...

    PLSQL到处用户对象和表

    通过PL/SQL,可以实现对Oracle数据库的高效操作,包括但不限于数据的增删改查、存储过程和触发器的创建等。 #### 3. 导出表 导出表是指将指定的表从Oracle数据库中导出到一个特定的文件中。通常情况下,导出文件会...

    plsql工具包含汉化包

    "plsql工具包含汉化包"意味着这个压缩包不仅提供了原始的PLSQL Developer软件,还包含了中文语言支持,使得中国用户在使用过程中可以更方便地理解和操作。 PL/SQL是Oracle数据库系统中的编程语言,它是SQL的扩展,...

    PLSQL Developer 9汉化包

    1. **图形化界面**:提供直观的用户界面,使得数据库对象如表、视图、存储过程、触发器等的管理和操作变得简单易行。 2. **代码编辑器**:支持语法高亮、自动完成、错误检查等功能,极大提高了PL/SQL编程的效率和...

    plsql10.02+中文包+注册机+插件

    4. **对象浏览器**:用户可以通过对象浏览器查看和管理数据库中的表、视图、存储过程、触发器等对象。 5. **数据操作**:支持SQL查询、数据导入导出,以及对表进行增删改查等操作。 6. **版本控制**:集成了版本...

    PLSQL Developer 8.0.0.1483 绿色版+汉化包

    在数据库对象管理方面,PLSQL Developer能够创建、修改和删除表、视图、索引、存储过程、触发器等各种对象。用户可以直观地浏览数据库结构,通过图形化的界面进行操作,大大简化了数据库管理工作。同时,该软件还...

    PLSQL操作ORALCE数据库

    使用PLSQL Developer,开发者可以方便地创建、修改和删除数据库对象,如表、视图、存储过程、触发器等。此外,它还支持对索引、分区、同义词等进行管理。 九、版本控制集成 PLSQL Developer支持与常见的版本控制...

    PLSQL Developer8.03中文语言包

    在这款8.03版本中,中文语言包的引入为中文用户提供了更友好的界面,使得操作和理解更为便捷。这个"chinese.exe"文件很可能是用于将PLSQL Developer的默认英文界面翻译成中文的安装程序。 在Oracle SQL和PL/SQL方面...

    PLSQL7.0/8.0最新通杀汉化包

    PLSQL是Oracle数据库管理系统中的一个集成开发环境,全称为Procedural Language/Structured Query Language,它是SQL语言的扩展,增加了程序设计的语法和控制结构,主要用于编写存储过程、触发器等数据库对象。PLSQL...

    PLSQL12完美汉化包

    这个“PLSQL12完美汉化包”针对的是PLSQL Developer的第12个版本,提供了完整的中文语言支持,使得中国用户在使用过程中能够更方便地理解和操作界面及文档。 PL/SQL是Oracle数据库系统中的过程式编程语言,它结合了...

    PLSQL Developer 10.0.5 官方 中文包

    4. **对象管理**:PLSQL Developer提供对Oracle数据库对象的全面管理,包括表、视图、存储过程、函数、触发器、索引等,可以进行创建、修改、删除等操作,并且能查看对象的详细信息。 5. **数据浏览与操作**:用户...

    PLSQL 8.0版本汉化文件

    1. PL/SQL:PL/SQL是Oracle数据库的编程语言,结合了SQL(结构化查询语言)和过程式编程语言的特点,用于创建数据库对象、处理数据、编写存储过程和触发器等。 2. 数据库管理:PLSQL Developer提供了一个直观的界面...

    plsql工具包

    PLSQL Developer是一款强大的Oracle数据库管理工具,专为PL/SQL编程语言设计,提供了一整套可视化界面,使得Oracle数据库的操作和管理变得更加直观和便捷。这款工具包是开发人员、DBA以及对Oracle数据库进行日常维护...

    plsql汉化包

    它主要用于编写存储过程、函数、触发器等数据库对象,以及执行数据库的复杂逻辑操作。 汉化包的安装步骤通常如下: 1. 下载:首先需要从可靠的来源下载PL/SQL Developer的汉化包,这通常是一个包含语言文件的压缩...

Global site tag (gtag.js) - Google Analytics