本地电信业务计费帐务系统ORACLE操作手册范本_第1页
本地电信业务计费帐务系统ORACLE操作手册范本_第2页
本地电信业务计费帐务系统ORACLE操作手册范本_第3页
本地电信业务计费帐务系统ORACLE操作手册范本_第4页
本地电信业务计费帐务系统ORACLE操作手册范本_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

DOC.NO.TIMESON-SM-2002-11-0001A

Normal

(公开)

本地电信业务计费帐务系统

ORACLE操作手册

Version1.0.0

2002.11.05

TIMESON

天辰科技©2000,2001,2002

AllRightsReserved

前言4

1.数据库的创建4

1.1.以下为ORACLE一动初始文件INITORA.ORA4

1.2.以下是建库脚本6

2.数据库基本操作11

2.1.数据库的正常启动11

2.2.安装启动与非安装启动12

2.3.独占和共享启动13

2.4.约束启动13

2.5.强制启动14

2.6.数据库关闭14

2.7.PL/SQL基本程序的编写15

2.7.1.SQL语言简介15

2.7.2.PL/SQL简介22

3.解决RDBMS问题32

31.性能优化32

3.1,1.优化存32

3.1.2.优化输入/输出36

3.1.3.优化排序40

3.1.4.优化索义建立40

3.2.备份和恢复40

3.2.1.备份提示41

3.3.ORACLE8SERVER诊断特性44

3.3.1.Oracle跟踪文件44

3.3.2.设置跟踪事件47

3.3.3.丫$监视视图52

3.3.4.锁实用程序54

3.4.ORACLE错误分析和解决方案56

3.4.1.常见Oracle错误56

3.4.2.ORACLE部错误71

3.4.3.优先权1/优先权2问题分类和诊断操作73

3.5.常见问题78

前,言

为了加强计费系统数据库的操作安全及更有效的管理计费系统数据库,

编写该操作手册。

在该手册若有错误及遗漏的地方还望各位读者不若指出与谅解。

L数据库的创建

以下仅为数据库创建的样例脚本,在实际系统中应根据数据库设计要与

系统实际配置而改变参数:

1.1.以下为ORACLE启动初始文件initora.ora

#thissampaleinitfilewritenbywzy2002/11/15

db_name="jfu

instance_name=ora8

#service_names=ora

#db_files=1024

control_files=("/home/orac1e/OraC11/contro101.ctl",

"/home/orac1e/OraCt1/contro102.ctl",

"/home/orac1e/OraCt1/contro103.ctl")

open_cursors=100

max_enab1ed_ro1es=50

db_file_multiblock_read_count=8

db_block_buffers=4096

shared_pool_size=52428800

large_pool_size=78643200

java_pool_size=20971520

log_checkpoint_interval=10000

1og_checkpoint_timeout=1800

processes=115

parallel_max_servers=5

log_buffer=32768

max_dump_fi1e_size=10240

global_names=true

#oracle_trace_collection_name='*"

db_block_size=16384

#remote_1ogin_passwordfile=exclusive

#os_authent_prefix=*'"

job_queue_processes=4

job_queue_interva1=60

open_links=10

#large_pool_size=614400

java_pool_size=20971520

distributed_transactions=10

mts_dispatchers

"(PROTOCOL二TCP)(PRE=oracle.aurora,server.SGiopServer)"

mts_dispatchers="(protoco1=TCP)"

?compatible=8.1.0

sort_area_size=65536

sort_area_retained_size=65536

#log_archive_start=true

1.2.以下是建库脚本

#!/bin/sh

ORACLE_SID=ora8

exportORACLE_SID

svrmgrl

connectinternal

startupnomountpfile=$ORACLE_HOME/dbs/initora.ora

CREATEDATABASE"appl"

controlfilereuse

maxdatafiles500

maxinstances8

maxlogfiles32

charactersetZHS16GBK

nationalcharactersetZHS16GBK

DATAFILE1/oradata/appl/systemOl.dbf1SIZE200M

logfilegroup1(*/opt/oracle/oradata/appl/appl_redo01.log',

*/oradata/appl/appl_redo01.log*)SIZE20M,

group2C/opt/oracle/oradata/appl/appl_redo02.log',

'/oradata/appl/appl_redo02.log")SIZE20M,

group3('/opt/oracle/oradata/appl/appl_redo03.log,

*/oradata/appl/appl_redo03.log)SIZE20M;

/opt/oracle/product/8.1.7/rdbms/admin/cata1og.sql;

CREATEROLLBACKSEGMENTrOTABLESPACESYSTEM

STORAGE(INITIAL128kNEXT128kMINEXTENTS2MAXEXTENTS20);

ALTERROLLBACKSEGMENTrOONLINE;

REM************TABLESPACEFOROEM_REPOSITORY***************

CREATETABLESPACEOEM.REPOSITORYDATAFILE*/oradata/appl/oemrepOl.dbf,SIZE5M

REUSE

AUTOEXTENDONNEXT25MMAXSIZE80M

MINIMUMEXTENT128k

DEFAULTSTORAGE(INITIAL128kNEXT128kMINEXTENTS1MAXEXTENTSUNLIMITED

PCTINCREASE0);

REM**************TABLESPACEFORROLLBACK※耕米秣**米*米料糕*米

CREATETABLESPACERBSDATAFILEF/oradata/appl/rbsOl.dbf'SIZE200MREUSE

DEFAULTSTORAGE(INITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITED

PCTINCREASE0);

REM**************TABLESPACEFORTEMPORARY/***************

CREATETABLESPACETEMPDATAFILE*/oradata/appl/tempO1.dbfJSIZE200MREUSE

DEFAULTSTORAGE(INITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITED

PCTINCREASE0)TEMPORARY;

REM科*林**标格*义*TABLESPACEFORUSER****次林*******林*****

CREATETABLESPACEUSERSDATAFILE,/oradata/appl/usersOl.dbf*SIZE50MREUSE

DEFAULTSTORAGE(INITIAL128kNEXT128kMINEXTENTS1MAXEXTENTSUNLIMITED

PCTINCREASE0);

REM**************TABLESPACEFORINDEX*********************

CREATETABLESPACEINDXDATAFILE*/oradata/appl/indxOl.dbf*SIZE50MREUSE

DEFAULTSTORAGE(INITIAL128kNEXT128kMINEXTENTS1MAXEXTENTSUNLIMITED

PCTINCREASE0);

REM****CreatingfourrolIbacksegments*****x********adclrollbacksegmentto

20***

CREATEROLLBACKSEGMENTrOlTABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptima1

4096K);

CREATEROLLBACKSEGMENTr02TABLESPACERBS

STORAGE(INITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr03TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr04TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr05TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr06TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr07TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr08TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr09TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrlOTABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K):

CREATEROLLBACKSEGMENTrllTABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl2TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptima1

4096K);

CREATEROLLBACKSEGMENTrl3TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl4TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl5TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl6TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl7TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl8TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTrl9TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

CREATEROLLBACKSEGMENTr20TABLESPACERBS

STORAGECINITIAL128kNEXT128kMINEXTENTS2MAXEXTENTSUNLIMITEDoptimal

4096K);

ALTERROLLBACKSEGMENTrOlONLINE;

ALTERROLLBACKSEGMENTr02ONLINE:

ALTERROLLBACKSEGMENTr03ONLINE;

ALTERROLLBACKSEGMENTr04ONLINE;

ALTERROLLBACKSEGMENTr05ONLINE;

ALTERROLLBACKSEGMENTr06ONLINE;

ALTERROLLBACKSEGMENTr07ONLINE;

ALTERROLLBACKSEGMENTr08ONLINE;

ALTERROLLBACKSEGMENTr09ONLINE;

ALTERROLLBACKSEGMENTrlOONLINE;

ALTERROLLBACKSEGMENTrllONLINE;

ALTERROLLBACKSEGMENTr12ONLINE;

ALTERROLLBACKSEGMENTrl3ONLINE;

ALTERROLLBACKSEGMENTrMONLINE;

ALTERROLLBACKSEGMENTrl5ONLINE;

ALTERROLLBACKSEGMENTrl6ONLINE;

ALTERROLLBACKSEGMENTrl7ONLINE;

ALTERROLLBACKSEGMENTr18ONLINE;

ALTERROLLBACKSEGMENTrl9ONLINE;

ALTERROLLBACKSEGMENTr20ONLINE;

ALTERROLLBACKSEGMENTrOOFFLINE;

REM称**SYSandSYSTEMusers****************

alterusersystemporarytablespaceTEMP;

alterusersystemtemporarytablespaceTEMP;

/opt/oracle/product/8.1.7/rdbms/admin/catproc.sql;

/opt/oracle/product/8.1.7/rdbms/admin/caths.sql;

/opt/oracle/product/8.1.7/rdbins/admin/otrcsvr.sql;

/opt/oracle/product/8.1.7/rdbms/admin/catexp.sql;

/opt/oracle/product/8.1.7/rdbins/adinin/catdbsyn.sql;

/opt/oracle/product/8.1.7/rdbms/admin/catdefer.sql;

/opt/oracle/product/8.1.7/rdbms/admin/catrep.sql;

/opt/oracle/product/8.1.7/rdbms/admin/dbmspool.sql;

/opt/oracle/product/8.1.7/rdbms/admin/catparr.sql;

/opt/oracle/product/8.1.7/rdbnis/admin/catblock.sql;

connectsystem/manager

/opt/oracle/product/8.1.7/sq1p1us/admin/pupbld.sql;

—createtheproduct_profileanduser_profile

—CATALOG.SQL,--加载数据库本身的数据字典视图

-CATPROC.SQL,-一加载PL/SQL使用的PACKAGE

-CATEXP.SQL-一加载EXPORT/IMPORT工具使用的数据字典

disconnect

spooloff

exit

在数据库建立完后,可用以下语句(也可以在建库脚本中直接增加)对对

tablespace增加数据文件:

ALTERTABLESPACE'*tablespace_nameMADDDATAFILE

,data_file_path/data_file_name'SIZE<thedatafilesizeyoudesigned><REUSE>

CAUTOEXTENDONNEXT{sizeyoudesignedtoexednd};>

2.数据库基本操作

2.1.数据库的正常启动

正常启动数据库的选项是normal,这也是数据启动的缺省选项。如果以

这种方式启动则将打开一个现场(现场:现场为一逻辑概念,是系统为数据

库打开提供的一系列的必需资源),并把数据库装入,然后打开数据库供用

户使用。具体操作如下:

1•先进入SVRMGR管理器

Ssvrmgr1

SVRMGR>

2•再联入inernal用户

$connectinternal

3•在用startup命令启动(若不在启动文件所在目录进入的SVRMGR或

启动文件名不是ORACLE缺省的文件名,则启动时应带启动目录与文

件名)

SVRMGR>startuppfile=<file-pathr/init-file>

2.2.安装启动与非安装启动

安装启动的选项是mount»表示只将数据库装入现场而不打开数据库;

非安装启动的选项是nomount,表示只建立数据库现场而不装入数据库,当

然也不打开数据库。

1•安装启动

SVRMGR>startup(pfile=<filepath/init-file>)mount

该方式启动数据库的的用途一般为:

>为数据文件更名;

>增加、删除或改名事物日志文件;

>使事物日志归档模式选项有效或失效;

>进行完整数据库的恢复操作

2•非安装启动

SVRMGR>startup{pfile=<filepath/init-file>}nomount

该方式启动数据库的用途一般为:

>创建一新的数据库

2.3.独占和共享启动

独占启动选项是exclusive,表示只允许一个例程使用该数据库;共享

启动的参数是shared,表示允许多个例程并行使用该数据库,即将数据库装

入多个现场。

1•共享启动

SVRMGR>startup{pfile=<filepath/init-file>}exclusive

2•独占启动

SVRMGR>startup{pfile=<filepath/init-file>}shared

2.4.约束启动

这种方式的选项是restrict»它启动数据库时装入并打开它,但此时的

数据库只能为有特殊权限的数据库管理员使用,一般用户不能联入数据库。

1•约束启动

SVRMGR>startup{pfile=<filepath/init-file>}restrict

一般来说当用户有createsession权限十可联入数据库,但对于restrict

方式启动的数据库只有restrictedsession系统权限用户才允许联入。

若在restrict方式下改变数据库运行方式,则可用altersystem命令,如

下:

SVRMGR>altersystemdisablerestrictedsession;

2.5.强制启动

在一些非正常情况下有可能在正常方式下启动数据库遇到麻烦,或在上次因

不能正常关闭数据库(如:用了参数abort)而导致不能正常启动数据库,则可

考虑使用强制启动数据库,其参数为:force.

1•强制启动

SVRMGR>startup{pfile=<filepath/init-file>}force;

此时,除非数据库有重大系统错误,一般情况下数据库可以起来。在应注意

的是用此方式启动的数据库会上次非正常关闭数据导致的非正常数据丢掉,数据

库房动后应及时的查看数据库的日志文件。

2.6.数据库关闭

1•正常关闭

SVRMGR>shutdownnormal;

这种方式下关闭数据库在关闭前检查所有的连接,并且发出命令后不允

许再有新的连接,在等所有用户断开连接后关闭数据库。在此方式下关

闭的数据库下次启动时不需要任何恢复过程。

2•立即关闭

SVRMGR>shutdournimmediate;

这种方式下关闭数据库并不等待用户断开连接,而是由系统断开与用户

的连接,然后关闭数据库。

3•异常关闭

SVRMGR>shutdownabort;

这种方式下关闭数据库系统不做任何的检查与回退操作而直接将数据库

现场撤消。

2.7.PL/SQL基本程序的编写

ORACLE提供功能了功能强大的第三代编程语言PL/SQL。在本小节主要介绍

基本的存储过程、存储函数及触发器的编写。

2.7.1.SQL语言简介

2.7.1.1.SQL概述

SQL是一种面向数据库的通用数据处理语言规,能完成以下几类功能:

提取查询数据,插入修改删除数据,生成修改和删除数据库对象,数据库安

全控制,数据库完整性及数据保护控制。

数据库对象包括表、视图、索引、同义词、族、触发器、函数、过程、

包、数据库链、快照等(表空间、回滚段、角色、用户)。数据库通过对表的

操作来管理存储在其中的数据。

2..SQL*PLUS界面

登录•输入SQLPLUS回车;输入正确的ORACLE用户名并回车;输入用

户口令并回车,显示提示符:SQL>

退出:输入EXIT即可。

2.7.1.1.2.命令的编辑与运行

>在命令提示符后输入SQL命令并运行,以分号结束输入;以斜杠结束

输入;以空行结束输入;

>利用SQL缓冲区进行PL/SQL块的编辑和运行;

>利用命令文件进行PL/SQL块的编辑和运行。

2.7.1,2.数据库查询

2..用SELECT语句从表中提取查询数据

SELECT的语法为:

SELECT[DISTINCT]{columnl,column2,…}FROMtablenameWHERE(conditions)CROUP

BY{conditions}ORDERBY(expressions}[ASC/DESC;;

说明:SELECT子句用于指定检索数据库的中哪些列,FROM子句用于指定从

哪一个表或视图中检索数据。

2.7.1.2.2.SELECT中的操作符及多表查询WHERE子句

WHERE子句中的条件可以是一个包含等号或不等号的条件表达式,也可以是

一个含有IN、NOTIN、BETWEEN、LIKE、ISNOTNULL等比较运算符的条件式,

还可以是由单一的条件表达通过逻辑运算符组合成复合条件。

2.7.1.2.3.ORDERBY子句

ORDERBY子句使得SQL在显示查询结果时将各返回行按顺序排列,返回行

的排列顺序由ORDERBY子句指定的表达式的值确定。

2..连接查询

利用SELECT语句进行数据库查询时,可以把多个表、视图的数据结合

起来,使得查询结果的每一行中包含来自多个表达式或视图的数据,这种操

作被称为连接查询。

连接查询的方法是在SELECT命令的FROM子句中指定两个或多个将被连

接查询的表或视图,并且在WHERE子句告诉ORACLE如何把多个表的数据进行

合并。根据WHERE子句中的条件表达式是等还是不等式,可以把连接查询分

为等式连接和不等式连接。

2.7.1.2.5.子查询

如果某一个SELECT命令(查询1)出现在另一个SQL命令(查询2)的一个

子句中,则称查询1是查询2的子查询。

2.7.1.3.基本数据类型

ORACEL支持下列部数据类型:

>VARCHAR2变长字符串,最长为2000字符。

NUMBER数值型。

>LONG变长字符数据,最长为2G字节。

>DATE日期型。

>RAW二进制数据,最长为255字节。

>LONGRAW变长二进制数据,最长为2G字节。

>ROWID二六进制串,表示表的行的唯一地址。

>CHAR定长字符数据,最长为255。

2.7.1.4.常用函数

一个函数类似于一个算符,它操作数据项,返回一个结果。函数在格式上

不同于算符,它个具有变元,可操作0个、一个、二个或多个变元,形式为:

函数名(变元,变元,…)

函数具有下列一般类形:

>单行函数

>分组函数

1­单行函数对查询的表或视图的每一行返回一个结果行。它有数值函

数,字符函数,日期函数,转换函数等。

2•分组函数返回的结果是基于行组而不是单行,所以分组函数不同于单

行函数。在许多分组函数中可有下列选项:

DISTRNCT该选项使分组函数只考虑变元表达式中的不同值。

>ALL该选项使分组函数考虑全部值,包含全部重复。

全部分组函数(除COUNT(*)外)忽略空值。如果具有分组函数的查询,

没有返回行或只有空值(分组函数的变元取值的行),则分组函数返回空值。

2.7.1.5.数据操纵语言命令

数据库操纵语言(DML)命令用于查询和操纵模式对象中的数据,它不稳式

地提交当前事务。它包含UPDATE'INSERT、DELETE、EXPLAINPLAN、SELECT和

LOCKTABLE等命令。下面简单介绍一下:

DUPDATEtabler.ameSET)co1umn1=expressionl,co1umn2=expression2,…}WHERE

{conditions);

例如:

SQL>updateservsetstate=FOK'whereserv_id=l23456and

serv_seq_nbr=l;

UPDATE子句指明了要修改的数据库是EMP,并用WHERE子句限制了只

对名字(ENAME)为‘MARTIN'的职工的数据进行修改,SET子句则说明修

改的方式,即把‘MARTION'的工作名称(JOB)改为‘MARAGER,.

2)INSERTINTOtablename{colunml,column2,•••}VALUES

{expression!,expression2,…};

例如:

SQL>insertintobill,servselect*fromtrans.serv_bak;

3)DELETEFROMtablenameWHERE{conditions};

例如:

SQL>deletefromacct_item_area01whereacct_id=l23245and

account_date=>200110'andacct_item_type_id=11001;

DELETE命令删除一条记录,而且DELETE命令只能删除整行,而不能

删除某行中的部分数据.

4)事务控制语句

提交命令(COMMIT):可以使数据库的修改永久化.设置AUTOCOMMIT为允

许状态:SQL>SETAUTOCOMMITON;

回浪命令(ROLLBACK):消除上一个COMMIT命令后的所做的全部修改,使

得数据库的容恢复到上一个COMMIT执行后的状态.使用方法是:

2.7.1.6.创建表、视图、索引、同义词、用户

2.7.1.6.1.表

建立表主要指定义下列信息:

>列定义

>完整性约束

>表所在表空间

>存储特性

>可选择的聚集

>从一查询获得数据

语法如下:

CREATETABLEtablenameCcolumnldatatype[DEFAULTexpression][constraint],

columnldatatype[DEFAULTexpression][constraint],)

[STORAGE子句][其他子句…];

例如:

SQL>createtableserv(serv_idnumber(lO),serv_seq_nbrnumber(3))

2tablespacedata_bi11

3storage(initial10mnext5m);

2.7.1.6.2.视图

视图是一个逻辑表,它允许操作者从其它表或视图存取数据,视图本身

不包含数据。视图所基于的表称为基表。

引入视图有下列作用:

>提供附加的表安全级,限制存取基表的行或/和列集合。

>隐藏数据复杂性。

>为数据提供另一种观点。

>促使ORACLE的某些操作在包含视图的数据库上执行,而不在另一个数

据库上执行。

2.7.1.6.3.索引

索引是种数据库芯象。对于在表或聚集的索引列上的每一值将包含一项,为

行提供直接的快速存取。在下列情况ORACLE可利用索引改进性能:

>按指定的索引列的值查找行。

>按索引列的顺序存取表。

语法:

createindex<index_name>on<tab1e_name(co1umn1,co1umn2•••)>

[storage语句][其它语句];

例如:

SQL>createindexidx_serv_01onserv(srev_id,serv_seq_nbr)

2tablespacedata_bi1l_idx

3storage(initial5mnext5m);

2..同义词

同义词:为表、视图、序列、存储函数、包、快照或其它同义词的另一

个名字。使用同义词为了安全和方便。对一对象建立同义词可有下列好站:

>引用对象不需指出对象的持有者。

>引用对象不需指出它所位于的数据库。

>为对象提供另一个名字。

语法:

craetesynonym<synonym_name>for[user_namej.<table_anme>;

例如:

(假定在CALL用户下)

SQL>createsynonymservforbill.serv;

注意:在同义词建立后要授权

2..用户

语法:

CREATEUSERusernameIDENTIFIEDBYpassword;

例如:

SQL>createuserbi11identifiedbyjfxt;

2.7.2.PL/SQL简介

2.7.2.1.PL/SQL概述

PL/SQL是Oracle对SQL规的扩展,是一种块结构语言,即构成一个PL/SQL

程序的基本单位(过程、函数和无名块)是逻辑块,可包含任何数目的嵌套了快。

这种程序结构支持逐步求精方法解决问题。一个块(或子块)将逻辑上相关的说

明和语句组合在一起,其形式为:

DECLARE

-说明

BEGIN

一语句序列

EXCEPTION

一例外处理

END;

它有以下优点:

>支持SQL;

>生产率高;

>性能好;

>可称植性;

>与ORACLE集成.

2.7.2.2.PL/SQL体系结构

PL/SQL运行系统是种技术,不是一种独立产品,可认为这种技术是PL/SQL

块和子程序的一种机,它可接收任何有效的PL/SQL块或子程序。如图所示:

PL/SQL机

PL/SQL块过程性语句

PUSQL

执行器

SQL语句

PL/SQL机可执行过程性语句,而将SQL语句废送到ORACLE服务器上的SQL

语句执行器。在ORACLE预编译程序或OCI程序中可嵌入无名的PL/SQL块。如果

ORACLE具有PROCEDURAL选件,有名的PL/SQL块(子程序)可单独编译,永久

地存储在数据库中,准备执行。

2.7.2.3.PL/SQL基础

PL/SQL有一字符集、保留字、标点、数据类型、严密语法等,它与SQL有

相同表示,现重点介绍。

2.7.2.3.1.数据类型

如下表所示:

数据类型子类型

纯量数值BINARY.INTEGERNATURAL,POSITIVE

类型NUMBERDEC,DECIMAL,DOUBLE

PRECISION,PLOAT,INTEGER,INT,NUME

RIC,REAL,SMALLINT

字符CHARCHARACTER,STRING

VARCHAR2VARCIIAR

LONG

LONGRAW

RAW

RAWID

逻辑BODLEAN

日期DATE

组合记录RECORD

类型表TABLE

2.7.2.3.2.变量和常量

在PL/SQL程序中可将值存储在变量和常量中,当程序执行时,变量的值可

以改变,而常量的值不能改变。

2.7.2.3.3.程序块式结构

DECLARE

一变量说明部分

BEGIN

END;

2.7.2.3.4.控制语句

分支语句:

IFconditionTHEN

sequence_statements;

ENDIF;

IFconditionlTHEN

Sequence_statements1;

ELSE

Sequence_statements2;

ENDIF;

IFconditionlTHEN

Sequence_statementsl;

ELSIFcondition2THEN

Sequence_statements2;

ELSE

Sequence_statements(n+1);

ENDIF;

2.7.2.3.5.循环语句

LOOP

Statements;

IFconditionTHEN

EXIT;

ENDIF;

ENDLOOP;

WHILEconditionLOOP

Statements;

ENDLOOP;

FORcounterINlower_con..high_conI(data-cube)LOOP

Statements;

ENDLOOP;

2.7.2.3.6.子程序

2.7.2.3.6.1.存储过程

语法:

create[orreplace]procedure函数名(参数1,参数2)ISIAS

[局部变量说明]

BEGIN

执行语句;

END;

例:

以下为一简单的样例存储过程:

CREATEORREPLACEPROCEDURE

utl_analyze_prg(

iOnwrINVARCHAR2DEFAULTNULL,

该参数为需要统计的用户,缺省则为全部*/

iLevelINVARCHAR2DEFAULTNULL

/*参数iLeve1为统计,

其值为:1.fortable

2.forcolunis

3.foral1columNs

4.foral1indexedcolumns

5.foral1indcxes

IS

"该程序用来计算统计*/

/*注意:该程序应在8i及以上版本中运行*/

tOwnerVARCHAR2(30);一存储输入的用户名

t_LevelVARCH.AR2C30);一存储输入的统计参数

t_TaleNameVARCHAR2(30);一存储选取的表名

t_.\nalyzcStrVARCHAR2C300);一存储形成的分析语句

BEGIN

t.Owner:=UPPER(TRIM(iOwer));

t.LevelUPPERCLTRIM(RTRIM((iLeve1)));

—若揄人的用户名为空时则退出程序

IFt.OwnerISNULLTHEN

DBMS_OUTPUT.PUT_LINE('请输入要用户名,);

RETURN;

ENDIF;

—若揄人的iLevel不合法则退出程序

IFt_LevelNOTIN('FORTABLE','FORCOLUMS','FORALLCOLUMS,,

,FORALLINDEXEDCOLUMNS;FORALLINDEXES,)

THEN

DBMS_OUTPUT.PUTJINE('输入的第二参数不合法,);

RETURN;

ENDIF;

FORRecIN(SELECTFROMall.tablesWHEREowner=t_0wner)

LOOP

BEGIN

t_AnalyzeStr:=*analyzetable*11Rec.table_nanie|\'computestatistics'||

t_Level;

EXECUTEIMMEDIATEt.AnalyzeStr;

EXCEPTIONWHENOTHERSTHEN

ROLLBACK;

RAISE;

END;

ENDLOOP;

END:

2.7.2.3.6.2.存储函数

语法:

create[orreplace]function函数名(参数1*参数2)RETURN类型ISI

AS

[局部变量说明]

BEGIN

执行语句;

END;

CREATEORREPLACEFUNCTION

utl_analyze_prg(iOnwerINVARCI1AR2DEFAULTNULL,

/*该参数为需要统计的用户,缺省则为全部*/

iEstimatePercentINNUMBERDEFAULT100

/*该参数为需要估算统计的百分比*/

)

RETURNINTEGER

IS

/*该程序用来估算统计*/

/*注意:该程序应在8i及以上版本中运行*/

tOwnerVARCHAR2(30);一存储输入的用户名

t_PerNUMBERO);--存储拘人的估第统计的百分比参数

tTa1eNameVARCHAR2C30);一存储选取的表名

t_.\nalyzcStrVAECHAR2C300);一存储形成的分析语句

BEGIN

t_(hner:=UPPER(TRIM(iOw

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论