ORACLE系统包介绍
Oracle 系统包
DBMS_OUTPUT
a)启用
i. dbms_output.enable(buffer_size in integer default 20000);
ii. set serveroutput on;
b)禁用
i. dbms_output.disable;
c)PUT和PUT_LINE
i. PUT:所有信息显示在同一行
ii. PUT_LINE信息显示后,自动换行
d)NEW_LINE用于在行的尾部追加行结束符,一般用PUT同时使用
e)GET_LINE和GET_LINES
i. DBMS_OUTPUT.GET_LINE(li ne 0UTVARCHAR2,status OUT INTEGER)用于取缓冲区的单行
信息
ii. DBMS_OUTPUT.GET_LINES(lines OUT chararr,numlies IN OUT INTEGER) 用于取得缓冲区的多行信息
DBMS_JOB
a)SUBMIT用于建立一个新作业
语法
DBMS_JOB.SUBMIT(
job OUT BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE DEFATULT SYSDATE, interval IN VARCHAR2 DEFAULT ' NULL' ,
no_parse IN BOOLEAN DEFAULT FALSE, instance IN BINARY_INTEGER DEFAULT
any_instance, force IN DEFAULT FALSE);
例子
VAR jobno NUMBER;
BEGIN
DBMS_JOB.SUBMI(
:jobno,
'pro_hrs101d0_ins_hrs101t0', sysdate,
‘sysdate+1 ');
b)REMOVE!于删除作业队列中的特定作业
语法:DBMS_JOB.REMOVE(jov IN BINARY_INTEGER);
例子:DBMS_JOB.REMOVE(10);--删除JOB号为10 的JOB
c)CHANGE用于改变与作业相关的所有信息
语法:
DBMS_JOB.CHANGE(
job IN BINARY_INTEGER,
what IN VARCHAR2,
next_date IN DATE,
interval IN VARCHAR2, instance IN BINARY_INTEGER DEFAULT NULL, force IN
BOOLEAN DEFAULT FALSE);
例子:execute dbms_job.change(2,null,null, 'sysdate+7')-修改2 号job 的
间隔时间为7 天
d)WHA:T 用于改变作业要执行的操作
语法:DBMS_JOB.WHAT(job IN BINARY_INTEGER,what IN VARCHAR2);
e)NEXT_DAT:用于改变作业的下次运行日期
语法:DBMS_JOB.NEXT_DATE(job in BINARY_INTEGER,next_date IN DATE);
f)INSTANCE用于改变运行作业的例程
语法:DBMS_JOB.INSTANCE(job IN BINARY_INTEGER, INSTANCE IN BINARY_INTEGER,
force IN BOOLEAN DEFAULT FALSE);
g)INTERVAL用于改变作业的运行时间间隔
语法:DBMS_JOB.INTERVAL(job IN BINARY_INTEGER,interval IN VARCHAR2);
h)BROKEN用于设置作业的中断标记.当中断了作业之后,作业将不会被运行
语法:DBMS_JOB.BROKEN(job IN BINARY_INTEGER,
broken IN BOOLEAN,
next_date IN DATE DEFAULT SYSDATE);
i)RUN用于运行已存在的作业
语法:DBMS_JOB.RUN(jobin BINARY_INTEGER,force IN BOOLEANDEFAULTFALSE); 三、DBMS_PIPE
概述:在同一例程的不同会话之间的管道通信
a)CREATE_PIPE用于建立公用或私有管道.如果参数private 为TRUE则为私有管道语法:
DBMS_PIPE.CREATE_TYPE(
pipename IN VARCHAR2,-- 指定管道的名称maxpipesize IN INTEGER DEFAULT 8192,--
指定管道消息的最大尺寸private IN BOOLEAN DEFAULT TRUE) --TRUE 为私有,FALSE 为
公用
REURN INTEGER;--如果返回为0,则管道建立成功,否则为建立管道失败
b)PACK_MESSAG用于将消息写入到本地消息缓冲区。
语法:DBMS_PIPE.PACK_MESSAGE(item IN VARCHAR2/NCHAR/NUMBER/DATE);
DBMS_PIPE.PACK_MESSAGE_RAW(item IN RAW); DBMS_PIPE.PACK_MESSAGE_ROWID(item
IN ROWID);
c)SEND_MESSAG用于将本地消息缓冲区的内容发送到管道
语法:DBMS_PIPE.SEND_MESSAGE(
pipename IN VARCHAR2,
timeout IN INTEGER DEFAULT MAXWAIT,-- 指定发送消息的超时时间
maxpipesize IN INTEGER DEFAULT 8192)
RETURN INTEGER;-- 如果返回为0,则发送成功,1为超时,3 为出现中断
d)RECEIVE_MESSAG囲于接收管道消息,并将消息写入本地消息缓冲区
语法:DBMS_PIPE.RECEIVE_MESSAGE(
pipename IN VARHCAR2,
timeout IN INTEGER DEFAULT MAXWAIT) RETURN INTEGER;-- 同SEND_MESSAGE表示
本地缓冲区不能容纳管道消息
e)NEXT_ITEM_TYPE确定本地消息缓冲区下项的数据类型,在调用RECEIVE_MESSAGE 之后调用
该函数
语法:DBMS_PIPE.NEXT_ITEM_TYPE RETURN INTEGEf如果返回为0,表示管道没有任何消息,6-NUMBE,R 9-ARCHAR,2 11-ROWID,12-DATE,23-RAW
f)UNPACK_MESSAGE用于将消息缓冲区的内容写入到变量中,在使用函数
RECEVIE_MESSAG接收管道消息之后使用取得消息缓冲区的消息,每次取一条消息
语法:DBMS_PIPE.UNPACK_MESSAGE(item OUT VARCHAR2/NCHAR/NUMBER/DATE);
DBMS_PIPE.UNPACK_MESSAGE_RAW(item OUT RAW);
DBMS_PIPE.UNPACK_MESSAGE_ROWID(item OUT ROWID);
g)REMOVE_PIPE用于删除已经建立的管道
语法:DBMS_PIPE.REMOVE_PIPE(pipename IN VARCHAR2) RETURN INTEGER;
h)PURG:E 用于清除管道中的内容
语法:DBMS_PIPE.PURGE(pipename IN VARCHAR2);
i)RESET_BUFFER用于复位管道缓冲区。在使用新管道之前应该复位管道缓冲区
语法:DBMS_PIPE.REST_BUFFER;
j)UNIQUE_SESSION_NAM用于为特定会话返回唯一的名称,名称最大长度为30字节语法:DBMS_PIPE.UNIQUE_SESSION_NAME();
四、DBMS_ALERT
概述:适用于生成并传递数据库预警信息。合理使用包和数据库触发器,可以使得在和生特定数据库事件时将信息传递给应用程序。
a)REGISTER注册预警事件
语法:DBMS_ALERT.REGISTER(name IN VARCHAR2)
b)REMOVE删除会话不需要的预警事件
语法:DBMS_ALERT.REMOVE(name IN VARCHAR2);
c)REMOVEALL删除当前会话所有已经注册的预警事件
语法:DBMS_ALERT.REMOVEALL();
d)SET_DEFAULT:S设置检测预警事件的时间间隔,默认时间间隔为5秒
语法:DBMS_ALERT.SET_DEFAULTS(sensitivity IN NUMBER);
e)SIGNAL指定预警所对应的预警消息事件
语法:DBMS_ALERT.SIGNAL( name IN VARCHAR2,message IN VARCHAR2);
f)WAITAN Y等待当前会话的任何预警事件,并且在预警事件发生时输出相应信
息
语法:DBMS_ALERT.WAITANY( name OUT VARCHAR2, message OUT VARCHAR2, status OUT INTEGER,-- 返回0 表示发生了预警事件,1 表示超时timeout IN NUMBER
DEFAULT MAXWAIT);-- 设置等待预警事的超时时间
g)WAITON:E 等待当前会话的特定预警事件,并且在发生预警事件时输出预警消息
语法:DBMS_ALERT.WAITONE( name OUT VARCHAR2, message OUT VARCHAR2, status OUT
INTEGER,-- 返回0 表示发生了预警事件,1 表示超时timeout IN NUMBER
DEFAULT MAXWAIT);-- 设置等待预警事的超时时间
五、DBMS_SESSION
概述:提供使用PL/SQL实现ALTERSESSION命令,SET ROLE命令和其他会话住处的
方法
a)SET_INENTIFIER:该过程用于设置会话的客户ID号
语法:DBMS_SESSION.SET_IDENTIFIER(client_id VARCHAR2);
b)SET_CONTEX该过程用于设置应用上下文属性
语法:DMBS_SESSION.SET_CONTEXT(
namespace VARCHAR2,-- 指定应用上下文的命名空间
attribute VARCHAR2,-- 指定应用上下文的属性
value varchar2);-- 指定属性值
DMBS_SESSION.SET_CONTEXT(
namespace VARCHAR2, attribute VARCHAR2, value varchar2,
username VARCHAR2,-- 指定应用上下文的用户名属性
client_id VARCHAR2);
c)CLEAR_CONTEX用:于清除应用上下文的属性设置
d)CLEAR_IDENTIFIER 删除会话的set_clie nt_id
e)SET_ROLE激活或禁止会话角色,与SQL语句的SET ROLE作用相同
f)SET_SQL_TRAC激活或禁止当前会话的SQL>踪,同ALTERSESSIONSET SQL_TRACE
g)SET_NLS设置NLS特征,同ALTER SESSION SET
h)CLOSE_DATABASE_LINK:闭已经打开的远程数据库链
i)SET_PACKAG复位当前会话的所有包,并且会释放包状态
j)MODIFY_PACKAGE_STA用于修改当前会话的PL/SQL程序单元的状态
k)UNIQUE_SESSIO N」D返回当前会话的唯一标识符
l)IS_ROLE_ENABLED确定当前会话是否激活了特定角色
m)IS_SESSION_ALIVE:确定特定会话是否处于活动状态
n)SET_CL0SE_CACHED_0PEN_CURSOR或关闭close_cached_open_cursors
o)FREE_UNUSED_USER_MEM在RY亍了大内存操作之后回收未用内存
p)LIST_CONTEXT返回当前会话的命名空间和上下文列表
q)SWITCH_CURRENT_CONSUMER_G改O!当前会话的资源使用组
六、DBMS_RLS
概述:用于实现清细访问控制(VPD:虚拟专用数据库),并且精细访问控制是通过在SQL 语句中动态增加谓词(where 子句)来实现。
a)ADD_POLICY用于为表、视图或同义词增加一个安全策略,当执行该操作结束时会
自动提交事务
语法:
DBMS_RLS.ADD_POLICY(
object_schema IN VARCHAR2 NULL,-- 指定包含表、视图或同义词的方案/用户
object_name IN VARCHAR2 ,-- 指定要增加安全策略的表、视图或同义词policy_name
IN VARCHAR2,-- 指定要增加的安全策略名称
function_schema IN VARCHAR2 NULL,-- 指定策略函数的所在方案/用户
policy_function IN VARCHAR2,-- 指定生成安全策略谓词的函数名
statement_types IN VARCHAR2 NULL,-- 指定使用安全策略的SQL语句(默认值
NULL表于适用于SELECT INSERT UDPAT以及DELETE语句)
update_check IN BOOLEAIFALSE,--指定在执行INSERT或UPDATE寸是否检查安全策略
enable IN BOOLEAN TRUE,-- 指定是否激活安全策略
static_policy IN BOOLEAN FALSE);-- 指定是否要生成静态的安全策略
b)DROP_POLIC 丫用于删除定义在特定表、视图或同义词上的安全策略
语法:DBMS_RLS.DROP_POLICY( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2);
c)REFRESH_POLICY用于刷新与安全策略修改相关的所有SQL语句,并使得Oracle
重新解析相关SQL语句
语法:DBMS_RLS.REFRESH_POLICY( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2, policy_name IN VARCHAR2);
d)ENABLE_POLIC:Y用于激活或禁止特定的安全策略
语法:DBMS_RLS.ENABLE_POLICY( object_schema IN VARCHAR2 NULL, object_name IN
VARCHAR2, policy_name IN VARCHAR2 ,enable IN BOOLEAN);
e)CREATE_POLICY_GRO用于建立安全策略组
语法:DBMS_RLS.CREATE_POLICY_GROUP( object_schema IN VARCHAR2 NULL,
object_name IN VARCHAR2, policy_group IN VARCHAR2)
f)ADD_GROUP_POL:用于增加与特定策略组相关的安全策略
语法:DBMS_RLS.CREATE_POLICY_GROUP( object_schema IN VARCHAR2 NULL, object_name IN VARCHAR2,
policy_group IN VARCHAR2 ,
policy_name in VARCHAR2, function_schema VARCHAR2, policy_function
VARCHAR2, statement_types VARCHAR2, update_check BOOLEAN, enabled
BOOLEAN, static_policy BOOLEAN FALSE);
g)ADD_POLICY_CONTEX用于为应用增加上下文
h)DELETE_POLICY_GRO U用于删除安全策略组
i)DROP_GROUP_POLI用于删除特定策略组的安全策略
j)DROP_POLICY_CONTEXT于删除对象的上下文
k)ENABLE_GROUPED_POLI用于激活或禁止特定策略组的安全策略
l)REFRESH_GROUPED_POL用于刷新与特定安全策略组的安全策略相关的SQL语句
七、DMBS_DDL
概述:该包提供了在PL/SQL块中执行DDL语句的方法
a)ALETER_COMPLlEt新编译过程、函数、包
语法:
DBMS_DDL.ALTER_COMPILE(type VARCHAR2,schema VARCHAR2,name VHARCHAR2);
b)ANALYZE_OBJEC分析表、索引、簇并生成统计数据
语法:DBMS_DDL.ANALYZE_OBJECT(
type VARCHAR2,-- 指定对象类型(TABLE、INDEX、CLUSTER)
schema VARCHAR2,
name VARCHAR2,
method VARCHAR2,-- 指定分析方法( COMPUT、EESTIMATE、DELETE)
estimate_rows NUMBER DEFAULT NULL,-- 指定要估计的行数
estimate_percent NUMBER DEFAULT NULL,-- 指定要估计的百分比
method_opt VARCHAR2 DEFAULT NULL,-- 指定分析方法选项(FOR TABLE、FOR ALL COLUMN等)
partname VARCHAR2 DEFAULT NULL);-- 指定要分析的分区
c)IS_TRIGGER_FIRE_ONC检测特定的DML或DDL触发器是否只触发一次语法:
DBMS_DDL.IS_TRIGGER_FIRE_ONCE(
trigger_owner IN VARCHAR2,-- 触发器所有者trigger_name IN VARCHAR2);--
触发器名
RETURN BOOLEAN;-- 返回为TRUE则表示触发器只被触发一次
d) SET_TRIGGER_FIRING_PROPERTY置DML/DDL触发器的触发属性语法:
DBMS_DDL.SET_TRIGGER_FIRING_PROPERTY(
trigger_owner IN VARCHAR2,
trigger_name IN VARCHAR2,
fire_once IN BOOLEAN);--设置为TRUE^触发一次,否则总是被触发
八、DBMS_RANDOM
概述:提供内置的随机数生成器,可以用于快速生成随机数
f)INITIALIZE :初始化DBMS_RANDOM初始化时,必须要提供随机数种子语法:
DBMS_RANDOM.INITIALIZE(seed IN BINARY_INTEGER)--生成小于seed 的随机数
g)SEED用于复位随机数种子
语法: DMBS_RANDOM.SEED(seed IN BINARY_INTEGER);
h)RANDOM:成随机数
语法: DBMS_RANDOM.RANDOM RETURN BINARY_INTEGER;
i)value(x,y): 产:介于x 与y 的随机数
语法: DBMS_RANDO V M A.LUE(1,100);
j)TERMINATE关闭DBMS_RANDOMI
语法: DBMS_RANDOM.TERMINATE;
九、UTL_FILE
概述:用于读写OS文件
a)FILE_TYPE:该类型是UTL_FALE包中所定义的记录类型,其成员是私有的,不能直接引用。该
类型的定义如下:
TYPE file_type IS RECODR(id BINARY_INTEGER,datatype BINARY_INTEGER);
b)FOPEN用于打OS文件,最多可以同时打开50个文件
语法:UTL_FILE.FOPEN(
location IN VARCHAR2,-- 文件目录
filename IN varchar2,-- 文件名
open_mode IN VARCHAR2,--打开方式: 'r' 、'w' max_linesize IN
BINARY_INTEGER);-- 每行的字节数
RETURN file_type;
c)FOPEN_NCHAR以UNICOD市式打开文件。
语法:UTL_FILE.FOPEN_NCHAR (
location IN VARCHAR2,-- 文件目录
filename IN varchar2,-- 文件名
open_mode IN VARCHAR2,--打开方式: 'r' 、'w' max_linesize IN
BINARY_INTEGER);-- 每行的字节数
RETURN file_type;
d)IS_OPEN确定文件是否已经打开
语法:UTL_FILE.IS_OPEN(file IN FILE_TYPE) RETURN BOOLEAN;
e)FCLOSE用于关闭已经打开的文件
语法:UTL_FILE.FCLOSE(file in out file_type);
f)FCLOSE_AL:L 用于关闭当前佳话打开的所有文件
语法:UTL_FILE.FCLOSE_ALL;
g)GET_LINE从已经打开的文件中读取行内容,行内容被读取到输出缓冲区
语法:UTL_FILE.GET_LINE(
file IN FILE_TYPE,
buffer OUT VARCHAR2,-- 用于存储读取信息linesize IN NUMBER,-- 指定读取的最大
字节数
len IN PLS_INTEGER DEFAULT NULL);-- 指定实际读取的长度
h)GET_LINE_NCHAR以UNICODE方式读取已打开文件的行内容
语法:UTL_FILE.GET_LINE_NCHAR(
file IN FILE_TYPE,
buffer OUT VARCHAR2,
len IN PLS_INTEGER DEFAULT NULL);
i)GET_RAV从文件中读取RAW字符串,关调节文件指针到读取位置
j)PUT用于将缓冲区内容写入到文件中,如果要结束行使用NEW_LINE 语法:UTL_FILE.PUT(file IN file_type,buffer IN VARCHAR2);
k)PUT_NCHA将缓冲区内容以UNICOD市式写入到文件
l)PUT_RA W将RAW缓冲区中的数据写入到OS文件
m)NEW_LINE用于为文件增加终止符
语法:UTL_FILE.NEW_LINE(file IN file_type,lines IN NATURAL :=1);
lines: 用于指定要增加的行终止符个数
n)PUT_LINE用于将文本缓冲区内容写入到文件,并自动追加行终止符
语法:UTL_FILE.PUT_LINE(
file IN file_type
buffer IN VARCHAR2,
autoflush IN BOOLEAN DEFAULT FALSE);
o)PUT_LINE_NCHAR将文本缓冲内容以UNICODE^式写入文件
p)PUTF以特定格式将文本内容写入到OS文件,其中%s表示字符串,\n为终止符q)PUT_NCHAR以特定格式将文本内容以UNICODE方式写入到OS文件
r)FFLUSH将数据强制性写到OS文件。正常情况下,当给文件写入数据时,数据会被暂存放在缓存中,过程FFLUSH用于强制将数据写入到OS文件
语法UTL_FILE.FFLUSH(file IN FILE_TYPE);
s)FSEEK用于移动文件指针到特定位置
语法UTL_FILE.FSEEK(
fid IN UTL_FILE.FILE_TYPE,
absolute_offset IN PLS_INTEGER DEFAULT NULL,-- 指定绝对位置
relative_offset IN PLS_INTEGER DEFAULT NULL) —指定相对位置
t)FREMOVE删除磁盘文件
语法UTL_FILE.FREMOVE(location IN VARCHAR2,filename IN VARCHAR2);
u)FCOPY将源文件的全部或部分内容复制到目标文件中。当使用该过程时,如果不设置起始行和结束行,则将复制文件的所有内容
语法: UTL_FILE.FCOPY(
location IN VARCHAR2,-- 源文件的目录
filename IN VARCHAR2,-- 源文件名
dest_dir IN VARCHAR2,-- 目标文件的目录
dest_file IN VARCHAR2,-- 目标文件名
start_line IN PLS_INTEGER DEFAULT 1,-- 指定起始行号
end_line IN PLS_INTEGER DEFAULT NULL );-- 指定结束行号
v) FGETPO :S 返回文件指针所有偏移位置
语法: UTL_FILE.FGETPOS(file IN file_type) RETURN PLS_INTEGER; w) FGETATT :R 读取磁盘文件,并返回文件属性
overwrite IN BOOLEAN DEFAULT FALSE )
2) UTL_INADDR 概述:用于取得局域网或 Internet 环境中的主机名和 IP 地址 a) GET_HOST_NAME 得指定IP 地址所对应的主机名
语法:UTL_INADDR.GET_HOST_NAME(N VARCHARDEFAUL1NULL) RETURNVARCHAR2 b) GET_HOST_ADDRESS 得指定主机所对应的 IP 地址
语法: UTL_INADDR.GET_HOST_ADDRESS(host IN VARCHAR2 DEFAULT NULL) RETURN
VARCHAR2;
3) DBMS_LOCK:
a) SLEEP 暂停n 秒
语法: DBMS_LOCK.SLEEP(n);--暂停 n 秒 语法: UTL_FILE.FGETATTR( location
IN VARCHAR2,-- filename IN VARCHAR2,-- exists OUT
BOOLEAN,-- file_length
OUT NUMBER,-- blocksize
OUT NUMBER) ;
x) FRENAME 修改已经存在的 OS 文件名,
语法: UTL_FILE.FRENAME( location IN VARCHAR2, filename IN
VARCHAR2, dest_dir IN
VARCHAR2, dest_file IN
VARCHAR2, 目录
文件名称 确定文件是否存在; 取得文件长度 --取得OS 块的尺寸 通过 overwrite 指定是否覆盖已存在的文件