ORACLE创建和使用子程序和包

匿名PLSQL程序:

1.用文本编辑器书写代码,在SQL*Plus中运行。

2.代码可以存储在文件系统中。

3.不能被其他程序调用,也不能被其他用户执行。

4.不能接受参数,也不能传递参数。


命名PL/SQL程序:

创建:1.使用文本编辑器书写并在SQL*Plus中执行。2.使用过程创建工具(Procedure Builder)

存储:1.以编译对象的方式存储在数据库中。2.以库文件的方式存储在文件系统中。

能被其它程序调用。

能被其他用户执行。

服务器端:1.以数据库对象的方式存储在数据库中。2.在服务器上运行。

客户端:1.存储在客户端的文件系统中。2.在客户端运行。


命名PL/SQL程序类型:

程序单元(存储在客户端或服务器段)1.过程(Procedures),2.函数(Functions)

库文件(Libraries存储在客户端)

包(Packages存储在客户端或服务器端)

触发器(Triggers存储在服务器端)


程序单元:

过程(Procedures):1.可以接受和传递多个参数。2.可以调用其它程序单元。

函数(Functions):与过程类似,但必须有一个返回值。


参数:

1.用于向程序单元传入或程序单元用于传出数据的变量。

2.在过程的头部进行声明。

3.调用过程时,调用者要向被调用的过程传递参数值。


参数的模式:

1.传入参数(IN):用于向过程传入数据,只读型。

2.传出参数(OUT):用于接收过程输出数据,只写型。

3.传入传出参数(IN OUT):既可以I向过程传入数据,也可以接受过程传出数据,可读可写型。

创建过程:

CREATE OR REPLACE PROCEDURE procedure_name

(parameter1 mode datatype,

parameter2 mode datatype,...

)IS | AS

local variable declarations

BEGIN

program statements

EXCEPTION

exception handlers

END;


参数的类型:

形式参数:在过程头部声明。

实际参数:由过程调用者在施用时提供。

两者要匹配类型、数量和顺序


在SQL/Plus中调试程序:

1.定位出错的程序行并纠正错误。

2.用SHOW ERRORS命令查看出错的详细信息。

3.DBMS_OUTPUT.PUT_LINE命令输出中间结果,以此来跟踪程序的流程。


创建函数:

CREATE OR REPLACE FUNCTION function_name

(parameter1 mode datatype,

parameter2 mode datatype,...)

RETURN function_return_data_type

IS local variable declarations

BEGIN

program statements

RETURN return_value;

EXCEPTION

exception handlers

RETURN EXCEPTION_NOTICE;

END;


RETURN 命令:

1.在函数头部的RETURN命令用于定于函数返回值得类型。

2.在函数体的RETURN命令用于传递函数的实际返回值。

3.RETUEN EXCEPTION_NOTICE返回函数调用过程中的出错信息。


函数调用:

1.可以被其它过程和函数或匿名PL/SQL块调用。

2.也可以再SQL语句中进行调用

return_value := function(parameter1_value,....);


存储单元的对象权限:

1.存储程序单元可以看做是一个数据库对象。

2.要允许其它用户使用你的程序单元,必须给该用户授予EXCUTE权限。


使用其他用户下的存储单元:

1.你必须被授予相应的执行权限。

2.调用时在对象名前加上该对象所有者的用户名

return_value:=LHOWARD.my_function TO_DATE('01/02/1112','MM/DD/YYYY');


调用其他用户的过程:

使用过程名称,并为之提供相应的参数值的列表:procedure_name(parameter1_value, parameter2_value...);


程序单元的依赖性:

对象依赖:程序单元依赖于它所引用的数据库对象(表,视图,序列等。。。)

程序依赖:程序单元依赖于它所调用的其它程序单元。


直接依赖和间接依赖:

直接依赖:直接调用的程序或引用的数据库对象。

间接依赖:通过子程序调用的程序或引用的数据库对象。


有效性验证:如果一个数据库对象或程序单元发生了改变,则引用该对象或者调用该程序单元的程序

必须要重新进行编译。


包:1.存储在服务器端的程序库,2.包含,全局变量的声明,游标的定义,过程,函数。


包和库的区别:1.库必须要显式的链接到应用程序中去,而包是随时都是可以被调用的。

2.库总是运行在客户端。3.包总是运行在服务器端。


包的组成:

定义部分:用于声明所有的公共变量,游标,过程和函数。

包体部分:过程和函数的代码。

基本原理:1.定义部分对用户是可见的,说明如何使用包。2.包体部分是不可见的,用户不会关心具体的代码


在PL/Plus中创建包

CREATE OR REPLACE PACKAGE package_name IS

variable_name datatype;

PRODEDURE procedure_name(parameter_list)

FUNCTION function_name(parameter_list);

END; 


调用包中的程序单元:

在过程名前加上其所在的包和名称:PACKAGE_NAME.program_unit_name(parameter_list);

例如:DBMS_OUTPUT.PUT_LINE('Hello World');


程序的重载:

重载:1.多个程序单元具有相同的名称,但接受不同的数据和类型的参数。

2.允许用户使用相同的命令,通过提供不同的参数,完成不同的调用请求。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值