ORACLE系统包介绍

ORACLE系统包介绍
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 指定是否覆盖已存在的文件

相关主题
相关文档
最新文档