开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

1.  子程序的各个部分:

声明部分、可执行部分、异常处理部分(可选)

2.子程序的分类:

A.  过程 - 执行某些操作

a.  创建过程的语法:

CREATE [OR REPLACE]  PROCEDURE  <procedure name> [(<parameter list>)]  IS|AS

<local variable declaration>

BEGIN

<executable statements>

[EXCEPTION

<exception handlers>]

END;

b.  过程参数的三种模式:

IN:用于接受调用程序的值、默认的参数模式

OUT:用于向调用程序返回值

IN OUT:用于接受调用程序的值,并向调用程序返回更新的值

c.  将过程的执行权限授予其他用户:

SQL> GRANT EXECUTE ON find_emp TO MARTIN;

SQL> GRANT EXECUTE ON swap TO PUBLIC;

d.  删除过程:SQL> DROP PROCEDURE find_emp;

B.  函数 - 执行操作并返回值

a.  创建函数的语法:

CREATE [OR REPLACE] FUNCTION  <function name> [(param1,param2)]   RETURN <datatype>  IS|AS   [local declarations]

BEGIN

Executable Statements;

RETURN result;

EXCEPTION

Exception handlers;

END;

b. 定义函数的限制:

函数只能接受 IN 参数,而不能接受 IN OUT 或 OUT 参数

形参不能是 PL/SQL 类型

函数的返回类型也必须是数据库类型

c.访问函数的两种方式:使用 PL/SQL 块、使用 SQL 语句

3.  子程序的优点:

模块化、可重用性、可维护性、安全性

4. 程序包:

是对相关过程、函数、变量、游标和异常等对象的封装

A.   程序包由规范和主体两部分组成

a.规范:声明程序包中公共对象。包括类型、变量、常量、异常、游标规范和子程序规范等

b.主体:声明程序包私有对象和实现在包规范中声明的子程序和游标

B . 创建程序包

a.   程序包规范

CREATE [OR REPLACE]  PACKAGE  package_name IS|AS

[Public item declarations]  [Subprogram specification]

END [package_name];

b.  程序包主体

CREATE [OR REPLACE]   PACKAGE  BODY  package_name   IS|AS

[Private item declarations]

[Subprogram bodies]

[BEGIN   Initialization]

END [package_name];

 5.  程序包的优点

a.  模块化

b.  更轻松的应用程序设计

c.  信息隐藏

d.  新增功能

e.  性能更佳

6.  程序包中的游标

A.  游标的定义分为游标规范和游标主体两部分

B.  在包规范中声明游标规范时必须使用 RETURN 子句指定游标的返回类型

RETURN子句指定的数据类型可以是:

a.  用 %ROWTYPE 属性引用表定义的记录类型

b.  程序员定义的记录类型

7.  有关子程序和程序包的信息

A.  USER_OBJECTS 视图包含用户创建的子程序和程序包的信息

SELECT object_name, object_type  FROM USER_OBJECTS  WHERE object_type IN (‘PROCEDURE‘, ‘FUNCTION‘, ‘PACKAGE‘, ‘PACKAGE BODY‘);

B.  USER_SOURCE 视图存储子程序和程序包的源代码

SELECT line, text FROM USER_SOURCE  WHERE NAME=‘TEST‘;

8.  触发器:

是当特定事件出现时自动执行的存储过程(特定事件可以是执行更新的DML语句和DDL语句)

注意:触发器不能被显式调用

9.  触发器的功能:

自动生成数据、自定义复杂的安全权限、提供审计和日志记录、启用复杂的业务逻辑

10.  创建触发器的语法

CREATE [OR REPLACE] TRIGGER  trigger_name  AFTER | BEFORE | INSTEAD OF  [INSERT] [[OR] UPDATE [OF column_list]]   [[OR] DELETE]  ON table_or_view_name

[REFERENCING {OLD [AS] old / NEW [AS] new}]  [FOR EACH ROW]

[WHEN (condition)]  pl/sql_block;

11.  DML触发器的相关概念

A.  BEFORE触发器:是在某种操作发生之前执行的触发器

B.  AFTER触发器:是在某种操作发生之后执行的触发器

C. 语句级触发器:无论受影响的行数是多少,都只执行一次

D.  行级触发器:对DML语句修改的每个行执行一次

E.  NEW伪记录:只在UPDATE和INSERT DML触发器内可用,它包含了修改发生后被 影响的行的值

F. OLD伪记录:只在UPDATE和DELETE DML触发器内可用,它包含了修改发生前被 影响的行的值

G.  WHEN子句:某段代码是否被执行

12.触发器由三部分组成:

A.  触发器语句(事件):定义激活触发器的 DML 事件和 DDL 事件

B.  触发器限制:执行触发器的条件,该条件必须为真才能激活触发器

C.  触发器操作(主体):包含一些 SQL 语句和代码,它们在发出了触发器语句且触发限制的值为真时运行

13. DML触发器:

当表发生数据修改事件(增加、删除、修改)自动执行的PL/SQL 块

语法:

CREATE OR REPLACE TRIGGER  触发器名称
{AFTER|BEFORE } --指定触发时机
{INSERT|DELETE|UPDATE}
--指定触发事件类型
ON 表名 
--指定所监控的表
{FOR EACH ROW} --指定触发次数

------上面:执行条件--------------下面:执行代码----------------
declare

BEGIN
  代码;
END;

14. 条件谓词

INSERTING、UPDATING、DELETING

15. 触发器应用

使用场合:控制数据安全、实现数据审计、实现数据完整性、实现参照完整性

16. INSTEAD OF触发器(替代触发器)

17.系统事件触发器

18.管理触发器

A.  启用和禁用触发器:何时禁止:数据导入导出时禁止

SQL> ALTER TRIGGER aiu_itemfile DISABLE;

SQL> ALTER TRIGGER aiu_itemfile ENABLE;

B.  重新编译触发器:数据库对象发生改变后

C.  删除触发器

SQL> DROP TRIGGER aiu_itemfile;

19. 触发器和存储过程

触发器                                                                存储过程

编写               无参数,返回值                                                有参数,有返回值(参数)

编写              不能commit或rollback                                                   能

调用方式            事件发生时自动调用                                         手工调用

操作对象           基于某张表                                                           与表无关

20.JDBC连接Oracle数据库

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connection con = null;

con = DriverManager.getConnection(jdbc:oracle:thin:@localhost:1521:数据库实例);

21.  在JDBC中执行PL/SQL匿名块

A.步骤:

a.  明确PreparedStatement执行匿名块的字符串

b.  创建PreparedStatemen对象

c.  根据需要设定绑定变量

d.   执行PreparedStatement对象

22.  在JDBC中执行PL/SQL的存储过程

A.  语法:

a.  {call   过程名[(?,?,?....)]}     //访问带参数的存储过程

b.  {?  =  cal  过程名[(?,?,?.......)]}    //访问返回结果参数的存储过程

c.   {call   过程名}       //访问不带参数的存储过程

B.步骤:

a.   明确CallableStatement调用字符串

b.  创建CallableStatement对象( CallableStatement  =  Connection.prepareCall(sql);)

c.   绑定输入(IN)参数

d.  注册输出(OUT)参数(CallableStatement .registerOutParameter(索引,  OracleTypes.数据类型))

e.   执行CallableStatement对象返回结果

时间: 2024-08-02 06:41:16

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle的相关文章

Oracle数据库之开发PL/SQL子程序和包

Oracle数据库之开发PL/SQL子程序和包 PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保存到数据库中,以便共享. 过程和函数均存储在数据库中,并通过参数与其调用者交换信息.过程和函数的唯一区别是函数总向调用者返回数据,而过程不返回数据. 1. 存储过程概念 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,存储在数据库中.经过第一次编译后

在JDBC中实现SQL语句的模糊查询

在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * from table where tableid like %id%; JDBC中的sql语句: String sql = "select * from table where tableid like \"%\"?\"%\"";//?为占位符 原文

PL/SQL子程序

一般来说过程和函数被称为子程序.过程是一段不具有返回值的代码块,而函数会返回一个值.子程序与匿名块的最大不同是它们可以存储到数据库的字典中,以便重用. 向dept表插入记录的过程 create or replace procedure newdept( p_deptno dept.deptno%TYPE, p_dname  dept.dname%TYPE, p_loc    dept.loc%TYPE ) AS v_deptcount NUMBER; begin select count(*)

oracle_开发子程序和包

包(package)用于组合逻辑相关的PL/sql类型的(例如:table 类型和record类型),pl/sql 项(列如:游标,和游标变量)和pl/sql子程序(例如:过程和函数) 通过使用pl/sql包不仅可以简化应用设计,提高应用 的性能,还可以实现信息的隐藏,子程序重载等功能. 下面就针对计算圆的面积来做个演示: 1—创建包规范 create or replace package dbutil_package is pi constant number(10,7):=3.1415926

Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

PL/SQL子程序 包括函数和过程.这里的函数指的是用户自己定义的函数,和系统函数是不同的.子程序一般是完成特定功能的PL/SQL程序块,并且具有一定的通用性,可以被不同的应用程序多次调用.Oracle提供可以把PL/SQL程序存储在数据库中,并可以再任何地方来运行它.这样就叫做存储过程或者是函数.过程和函数的唯一区别就是函数总是向调用者返回数据,而过程则不返回数据. 函数 如果用户要经常执行某些操作,并且需要返回特定的数据,那么就可以将这些操作构造成一个函数. 可以使用SQL语句定义函数. 基

PL/SQL重新编译包无反应案例2

在这篇"PL/SQL重新编译包无反应"里面介绍了编译包无反应的情况,今天又遇到一起案例, 在测试环境中,一个包的STATUS为INVALID,重新编译时,一直处于编译状态,检查发现下面两条因素都不存在: 1:当包正在被调用执行时,编译该包会导致无响应情况.     2:包中的对象或依赖对象被其它session所拥有. 后面检查发现包中调用了一个LINKED SERVER,由于迁移测试服务器,原服务器的IP地址变化了,导致LINKED SERVER已经无效了.所以出现了这种情况.重建了L

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

在PL/SQL使用游标获取数据及动态SQL

1.游标概念: 当在PL/SQL块中执行DML(增删改)时,Oracle会为其分配上下文区(Context Area),游标是指向上下文区的指针 2.  游标分类: A.  隐式游标 a.  在PL/SQL中使用DML语句时自动创建隐式游标 b.  隐式游标自动声明.打开和关闭,其名为 SQL c.  通过检查隐式游标的属性可以获得最近执行的DML 语句的信息 d.  隐式游标的属性有: %FOUND – SQL 语句影响了一行或多行时为 TRUE %NOTFOUND – SQL 语句没有影响任

[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆)

原文:[推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程详解之三: PL/SQL流程控制语句(不给规则,不成方圆) ——通过知识共享树立个人品牌. 继上五篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之五:异常错误处理(知已知彼.百战不