第十章 过程,函数,包和触发器
认识存储过程和函数
CREATE OR REPLACE PROCEDURE TEST
(EMP_NO EMP.EMPNO%TYPE,
SALARY EMP.SAL%TYPE)
IS(/AS)
EMP_NAME EMP.ENAME%TYPE;
BEGIN
UPDATE EMP SET SAL = SALARY WHERE EMPNO = EMP_NO;
COMMIT;
SELECT ENAME INT EMP_NAME FROM EMP WHERE EMPNO = EMP_NO;
DBMS_OUTPUT.PUT_LINE(EMP_NAME);
END TEST;
查看过程:
DESC USER_OBJECTS;
SELECT * FROM USER_OBJECTS WHERE OBJECT_NAME='TEST';
SELECT TEXT FROM USER_SOURCE WHERE NAME='TEST' ORDER BY LINE;
SPOOL C:/TEST.SQL;
SPOOL OFF;
执行方法:
1, EXECUTE TEST(7788,3300);
2,
BEGIN
TEST(7788, 3500);
END;
查看错误:
SELECT * FROM USER_ERRORS;
删除过程:
DROP PROCEDURE XXX
修改过程,重新编译:
ALTER PROCEDURE XX COMPILE;
形式参数三种模式:IN,OUT,IN OUT.
OUT只可能出现在赋值语句的左边.
也可出现在INTO后.还可输出.
当有OUT参数时的调用方式(只能通过块来调用):
DECLARE
EN EMP.ENAME%TYPE;
BEGIN
EN := 'SCOTT';
TEST1(7788,3500, EN);
DBMS_OUTPUT.PUT_LINE(EN);
END;
-----------------------------
函数:
CREATE OR REPLACE FUNCTION FIND_NUM
RETURN NUBMER
IS
NUM NUMBER(5);
BEGIN
SELECT COUNT(*) INTO NUM FROM EMP;
RETURN NUM;
END FIND_NUM;
函数可以赋给一个变量,也可直接输出.
DESC XX;
可以直接查看过程与函数的参数列表.
过程与函数异常处理与Java类似.
过程与函数的安全性:
可以对权限进行灵活控制.
GRANT EXECUTE ON XXX TO SCOTT;
SELECT * FROM USER_DEPENDENCES;
===============================
包(PACKAGE)
包说明是操作接口.
CREATE OR REPLACE PACKAGE P1
AS
PROCUDEURE UPDATE_EMP(
EMP_NO EMP.EMPNO%TYPE,);
FUNCTION ....
TYPE CUR IS REF CURSOR;
PROCEDURE FIND_ALL(EMPLIST OUT CUR);
END P1;
使用系统包来操纵文件:
GRANT CREATE ANY DIRECTORY TO SCOTT;
CREATE DIRECTORY ABC AS 'C:/TMPFILE';
DESC DBA_DIRECTORIES;
SELECT * FROM DBA_DIRECTORIES;
CREATE OR REPLACE PROCEDURE GENERATE
(
DIRNAME VARCHAR2,
FILENAME VARCHAR2,
OBJECTNAME VARCHAR2
)
AS
CURSOR FILECURSOR IS SELECT TEXT FROM USER_SOURCE WHERE NAME=OBJECTNAME ORDER BY LINE;
FILEID UTL_FILE.FILE_TYPE;
BEGIN
FILEID = UTL_FILE.FOPEN(DIRNAME, FILENAME,'W');
FOR LINES IN FILECURSOR LOOP
UTL_FILE.PUT(FILEID,LINES.TEXT);
END LOOP;
UTL_FILE.FCLOSE(FILEID);
END;
=================================
触发器
语句级触发器
CREATE OR REPLACE TRIGGER TR1
BEFORE INSERT OR UPDATE ON EMP
FOR EACH ROW
DECLARE
EMPNAME EMP.ENAME%TYPE;
BEGIN
IF INSERTING THEN
DBMS_OUTPUT.PUT_LINE(:NEW.ENAME);
INSERT INTO EMP_LOG VALUES(:NEW.EMPNO,'INSERT'SYSDATE);
ELSIF UPDATING THEN
INSERT INTO EMP_LOG VALUES(:OLD.EMPNO,'UPDATE'SYSDATE);
DBMS_OUTPUT.PUT_LINE(:NEW.ENAME);
END IF;
END;
限制一周内插入数据的时间
CREATE OR REPLACE TRIGGER SECURE_EMP
BEFORE INSERT ON EMP
DECLARE
V_DUMMY VARCHAR2(1);
BEGIN
IF(TO_CHAR(SYSDATE,'DY')
......
行级触发器
CREATE OR REPLACE TRIGGER TR3
BEFORE INSERT ON EMP
FOR EACH ROW
DECLARE
EX EXCEPTION;
BEGIN
IF :NEW.SAL > 10000 THEN
RAISE EX;
END IF;
EXCEPTION
WHEN EX THEN
DBMS_OUTPUT.PUT_LINE('TOO MUCH MONEY');
END;
触发器的触是按照创建的先后顺序触发的.
在数据上的操作,遇到系统异常会全部回滚.
INSTEAD OF触发器
用于操作视图的插入,修改,删除
create or replace trigger xxx
instead of insert on employee_names
begin
....
end;
触发器的管理
alter trigger ..
alter trigger ..
enable,disable
* 触发器每一次触发时都会重新编译.
user_triggers 数据字典查看系统有哪些触发器.
在触发器中进行的数据操作:
1,修改没有关联的表的数据.
2,修改被触发表的不同列数.
3,禁止修改表中主键值.
7,不允许从一个变化的表中读取数据.
触发器常见应用:
安全性
审计
分享到:
- 2009-09-21 00:03
- 浏览 1323
- 评论(0)
- 论坛回复 / 浏览 (0 / 2620)
- 查看更多
相关推荐
存储过程、函数、触发器和包
其中,存储过程、函数和触发器是Oracle数据库中的重要组件,它们极大地增强了数据库的灵活性和性能。接下来,我们将深入探讨这三个核心概念及其应用。 1. 存储过程: 存储过程是一组预先编译的SQL语句,存储在...
这份"oracle笔记(存储过程函数触发器游标流程控制等)"涵盖了Oracle数据库管理中的关键知识点,包括但不限于以下几个方面: 1. **存储过程与函数**:存储过程是预编译的SQL语句集合,用于执行特定任务。它们可以提高...
在Oracle数据库中,存储过程、函数、包和触发器是PL/SQL编程的重要组成部分,它们提供了高级的数据处理和业务逻辑管理功能。 存储过程是预编译的PL/SQL代码块,设计用于执行特定任务。当你需要多次执行相同或类似的...
在`oracle函数.txt`中,你可能会找到关于如何声明、定义和调用函数的详细说明。 2. **Oracle游标**:游标允许我们处理查询结果集中的每一行数据。在`oracle游标.txt`中,你可以学习到如何声明、打开、读取和关闭...
通过以上介绍,我们可以看到Oracle中的存储过程、函数和触发器都是强大的工具,它们能够帮助开发人员更高效地管理数据库,并实现复杂的数据操作和逻辑处理。这些特性对于构建健壮的应用程序至关重要。
本套教程全面覆盖了Oracle数据库的核心编程元素,包括存储过程、函数、触发器、异常处理、游标和存储包,这些都是数据库开发和管理中的关键概念。 首先,我们来详细了解存储过程。存储过程是一组预编译的SQL语句,...
总之,"Oracle触发器实时调用Java中HTTP接口"是一个数据库与应用程序实时通信的示例,涉及Oracle的触发器、存储过程和UTL_HTTP包,以及Java HTTP服务器的设计和实现。这样的设计需要对Oracle PL/SQL和Java网络编程有...
总之,Oracle PL/SQL中的存储过程、函数和触发器为数据库开发提供了强大的工具,它们使得数据库不仅仅是一个数据存储的地方,更是业务逻辑的执行平台。深入理解和熟练掌握这些概念,对于任何Oracle数据库管理员或...
Oracle 高级语法是指在 Oracle 数据库管理系统中使用的高级语法结构,包括事务、函数、存储过程、触发器、异常等。这些语法结构是 Oracle 数据库开发和管理的核心内容,对于数据库开发者和管理员来说是必备的知识。 ...
在Oracle中,存储过程是预先编译好的SQL语句集合,它可以接受参数、返回结果、包含流程控制和变量声明,类似于其他编程语言中的函数。存储过程的使用有以下几个主要优点: 1. **执行速度快**:由于存储过程在创建时...
总的来说,Oracle Job调度存储过程和触发器是数据库管理中不可或缺的工具,它们允许数据库管理员自动化许多常规任务,提高效率,减少人为错误,并确保数据的一致性和准确性。通过灵活地配置和组合这些功能,可以实现...
综上所述,存储过程、存储函数和触发器都是数据库中非常重要的组成部分,它们可以帮助开发者编写更加高效和健壮的应用程序。理解它们的用途和区别对于优化数据库性能和实现复杂业务逻辑至关重要。
PLSQL Developer是一种功能强大的Oracle数据库开发工具,提供了许多功能来帮助开发者快速编写和管理存储过程、存储函数和触发器等高级数据库对象。本文将详细介绍如何使用PLSQL Developer编写和管理存储过程、存储...
本文将深入探讨PL/SQL中的三个关键概念:函数、包和触发器,以及它们在Oracle数据库系统中的应用。 ### 1. 函数(Functions) 函数是PL/SQL中可重用的代码单元,它们接收输入参数,执行计算或操作,并返回一个结果...
触发器类似于过程和函数,具有声明、执行和异常处理的部分,但其独特之处在于由特定事件驱动,无需外部调用即可自动执行。这些事件通常包括对数据库表的INSERT、UPDATE和DELETE操作,以及数据库的启动与关闭等系统...
【Oracle函数】 函数类似于存储过程,但其区别在于函数必须返回一个值。创建函数的语法与创建存储过程类似,只是使用`CREATE FUNCTION`语句,并在末尾声明返回类型。函数可以被其他SQL语句或过程调用。 【Oracle...
《Oracle触发器与存储过程高级编程》第3版是一本深入探讨Oracle数据库中触发器和存储过程技术的专业书籍。在Oracle数据库系统中,触发器和存储过程是数据库管理员和开发人员进行复杂业务逻辑处理和数据管理的重要...
Oracle数据库是广泛应用于大型企业级数据管理的一种关系型数据库系统,它支持丰富的数据库技术,包括存储过程、函数、触发器和包等高级特性。这些特性极大地增强了数据库的灵活性和功能,使得开发者能够创建复杂的...
"orafce-3.1.2"是这个项目的某个版本,它包含了多个与Oracle相似的函数和过程。例如: 1. **日期和时间函数**:Oracle中的ADD_MONTHS、LAST_DAY、NEXT_DAY等在orafce中都有对应的实现,帮助用户处理日期和时间数据...