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一些补充
2012-07-05 14:33 876704 一些补充 1、存储过程的参数 in:输入参数, ... -
plsql存储过程、函数
2012-07-05 14:30 6147629 ------------------------- ... -
sql trace与执行计划
2012-07-04 17:32 1932627 ----执行计划 oracle在执行一个SQL之前 ... -
plsql高级操作
2012-07-04 17:31 1326627 ---group by 子句的增强 --roll ... -
plsql权限、数据连接和集合操作
2012-07-04 17:30 1423627 ---控制用户权限 Oracle的权限主要包括角色 ... -
plsql查询和数据对象
2012-07-04 17:01 3711626 ---多表查询 --Oracle ... -
plsql简单操作
2012-07-04 16:59 2947626 1、pl/sql --NULL表示不可用、未赋值、不 ... -
oracle与jdbc的结合
2012-06-13 22:17 1275import java.sql.Connectio ... -
oracle 触发器、视图、自定义类型和数组
2012-06-13 22:11 32121:视图(view) 视图的作用: A:控制数据访问 ... -
oracle 存储过程和函数、程序包
2012-06-13 22:07 15871:存储过程 什么是存 ... -
oracle 游标管理
2012-06-13 22:04 915游标: 游标:逐行处理查询结果,以编程的方式访问数据。 游 ... -
oracle pl/sql编程
2012-06-13 22:01 10011:什么是PL/SQL 编程式的SQL语句 2:PL/SQ ... -
oracle单表查询与多表查询
2012-06-11 19:21 6207一、单表查询 1 基本查询 查询格式: ... -
oracle DDL、DML与TCL
2012-06-11 19:07 1492一、DDL 1、建表 建表语 ... -
oracle基础
2012-06-10 12:40 10081 oracle数据库基础 Oracle数据库简介 ...
相关推荐
触发器是 Oracle 中的一种特殊对象,它可以在特定的事件发生时自动执行某些操作。触发器可以分为两种:语句级触发器和行级触发器。语句级触发器是指当执行 DML 语句时,以语句为单位执行的触发器,即语句执行一次,...
这个8.0版本的汉化包是专为那些需要中文界面的用户设计的,使得国内用户在使用PLSQL Developer时能更加方便地理解和操作。 PLSQL Developer的主要特点包括: 1. **代码编辑器**:提供了智能感知功能,可以自动完成...
12. **数据库对象的操作**:学习如何通过PLSQL操作表、视图、索引、触发器等数据库对象。 在“精通Oracle.10g.Pl.SQL编程.pdf”这份文档中,可能会深入讲解Oracle 10g版本下的PLSQL编程,包括更多的高级特性、最佳...
本笔记集合将带你从基础入门到深入掌握PLSQL的核心概念和技术,包括“Hello World”式的简单示例,触发器的使用,以及包和游标的高级应用。 首先,让我们从"Hello World"开始。在PLSQL中,你可以创建一个简单的存储...
3. **对象浏览器**:可以浏览和管理数据库中的所有对象,如表、视图、存储过程、触发器等,方便进行数据查询和对象操作。 4. **数据导入导出**:支持数据的导入和导出功能,方便数据迁移或备份。 5. **报表生成器*...
- PL/SQL编辑器:提供代码折叠、断点设置、调试器等,便于开发和调试存储过程、函数和触发器。 - 数据浏览和操作:可以直接在工具中查看和修改数据库中的数据,支持表格、网格和文本视图。 - 图形化对象浏览器:可以...
在PLSQL Developer 12.0版本中,为满足中国用户的需求,官方提供了汉化包,使得用户能够以中文界面进行操作,提高工作效率。这款汉化包确保了全中文的界面,避免了半汉化的问题,让用户在使用过程中更加得心应手。 ...
通过PL/SQL,可以实现对Oracle数据库的高效操作,包括但不限于数据的增删改查、存储过程和触发器的创建等。 #### 3. 导出表 导出表是指将指定的表从Oracle数据库中导出到一个特定的文件中。通常情况下,导出文件会...
"plsql工具包含汉化包"意味着这个压缩包不仅提供了原始的PLSQL Developer软件,还包含了中文语言支持,使得中国用户在使用过程中可以更方便地理解和操作。 PL/SQL是Oracle数据库系统中的编程语言,它是SQL的扩展,...
1. **图形化界面**:提供直观的用户界面,使得数据库对象如表、视图、存储过程、触发器等的管理和操作变得简单易行。 2. **代码编辑器**:支持语法高亮、自动完成、错误检查等功能,极大提高了PL/SQL编程的效率和...
4. **对象浏览器**:用户可以通过对象浏览器查看和管理数据库中的表、视图、存储过程、触发器等对象。 5. **数据操作**:支持SQL查询、数据导入导出,以及对表进行增删改查等操作。 6. **版本控制**:集成了版本...
在数据库对象管理方面,PLSQL Developer能够创建、修改和删除表、视图、索引、存储过程、触发器等各种对象。用户可以直观地浏览数据库结构,通过图形化的界面进行操作,大大简化了数据库管理工作。同时,该软件还...
使用PLSQL Developer,开发者可以方便地创建、修改和删除数据库对象,如表、视图、存储过程、触发器等。此外,它还支持对索引、分区、同义词等进行管理。 九、版本控制集成 PLSQL Developer支持与常见的版本控制...
在这款8.03版本中,中文语言包的引入为中文用户提供了更友好的界面,使得操作和理解更为便捷。这个"chinese.exe"文件很可能是用于将PLSQL Developer的默认英文界面翻译成中文的安装程序。 在Oracle SQL和PL/SQL方面...
PLSQL是Oracle数据库管理系统中的一个集成开发环境,全称为Procedural Language/Structured Query Language,它是SQL语言的扩展,增加了程序设计的语法和控制结构,主要用于编写存储过程、触发器等数据库对象。PLSQL...
这个“PLSQL12完美汉化包”针对的是PLSQL Developer的第12个版本,提供了完整的中文语言支持,使得中国用户在使用过程中能够更方便地理解和操作界面及文档。 PL/SQL是Oracle数据库系统中的过程式编程语言,它结合了...
4. **对象管理**:PLSQL Developer提供对Oracle数据库对象的全面管理,包括表、视图、存储过程、函数、触发器、索引等,可以进行创建、修改、删除等操作,并且能查看对象的详细信息。 5. **数据浏览与操作**:用户...
1. PL/SQL:PL/SQL是Oracle数据库的编程语言,结合了SQL(结构化查询语言)和过程式编程语言的特点,用于创建数据库对象、处理数据、编写存储过程和触发器等。 2. 数据库管理:PLSQL Developer提供了一个直观的界面...
PLSQL Developer是一款强大的Oracle数据库管理工具,专为PL/SQL编程语言设计,提供了一整套可视化界面,使得Oracle数据库的操作和管理变得更加直观和便捷。这款工具包是开发人员、DBA以及对Oracle数据库进行日常维护...
它主要用于编写存储过程、函数、触发器等数据库对象,以及执行数据库的复杂逻辑操作。 汉化包的安装步骤通常如下: 1. 下载:首先需要从可靠的来源下载PL/SQL Developer的汉化包,这通常是一个包含语言文件的压缩...