Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1355607
  • 博文数量: 416
  • 博客积分: 13005
  • 博客等级: 上将
  • 技术积分: 3297
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-05 16:26
文章分类

全部博文(416)

文章存档

2014年(1)

2013年(4)

2012年(46)

2011年(64)

2010年(12)

2009年(4)

2008年(40)

2007年(187)

2006年(58)

分类: Oracle

2007-02-02 09:53:34

ORACLE PLSQL使用经验总结_9

使用符合数据 
一个PL/SQL表按两个步骤声明(declare),首先声明表的型,然后一个PL/SQL表声明为这种类型。例: 
DECLARE 
TYPE customer_table_type IS TABLE OF customer%ROWTYPE 
INDEX BY BINARY_INTEGER; 
customer_table customer_table_type; 
声明部分必先基于CUSTOMERCUSTOMER_TABLE_TYPE 的表的数据型,然后,把CUSTOMER_TABLE 声明成CUSTOMER_TABLE_TYPE型。 
一个记录record)至少要有一个域,必要可有多个域。你可以声明和引用嵌套的记录 
记录可以定义为NOT NULL记录中的数据可以是不同的数据型。 
DECLARE 
TYPE product_table_type IS TABLE OF product%ROWTYPE 
INDEX BY BINARY_INTEGER; 
product_table product_table_type; 
行以下句: 
product_table(10).manufacturer_id := 5; 
PL/SQL
PRODUCT_TABLE 记录10中的MANUFACTURER_ID域被5 
如果不知道数据
字段的数据型和数目,或者运行,数据字段的数据型和数目可能会改,可使用%ROWTYPE属性来声明一个PL/SQL域。%ROWTYPE属性可根据数据表格或视图的字段集合,声明一个PL/SQL记录 
BINARY_INTEGER 
是主关键字(primary key)的数据型,用作PL/SQL的索引。 
式游 
FOR不需要FETCH句的。游,在循次重提取一行,所有的行理后,游会自动关闭 
控制式游的四个命令里,CURSOR句用于声明一个式游,定参数。OPEN句用查询引用的赋值,如果查询没有返回行,PL/SQL不会生异常。FETCHINTO子句用于把当前行的提取到量中。在完成行的理后,CLOSE句会关闭放行的活集合,游标关闭后可以重新打并建立新的活集合。 
式游用于返回多于一行的查询式游会被式声明,用于所有的DML句和SELECT句,一次只理一行。式游不能通使用OPEN, FETCH, CLOSE句控制。用于个查询返回的多行数据。 
PL/SQL行部分一个记录赋值法: 
record_name.field_name := expression; 
级显式游概念 
伴随FOR UPDATE子句一起使用的UPDATE  DELETE 句中可以使用WHERE CURRENT OF 子句。WHERE CURRENT OF字句用于更新或除当前行。FOR UPDATE OF子句会定被SELECT句影响的行。 
DECLARE 
CURSOR inv_cursor (p_man_id NUMBER, p_name VARCHAR2) 
IS SELECT id, name FROM inventory 
WHERE manufacturer_id = p_man_id AND name = p_name; 
如果你
建了一个参数的游,你可以在打标时传递值。要把值传递到游INV_CURSOR行以下句子:OPEN inv_cursor (45094, 'Cable'); 
开时45094‘Cable’传递到参数P_MAN_ID P_NAME 
你可以在FROM子句中使用子
查询为查询创建一个数据源,这样查询可以用作游的数据源。 
如果你声明游
标时了一个参数的游,你必指定指定参数的数据型,但不用指定大小。理例外 
声明部分用于声明ORACLE器的非异常和用异常,俘异常先要在声明部分声明异常的名称。法:exception EXEPTION; 
然后把声明的异常和准的ORACLE错误编号相关联,使用EXCEPTION_INIT句,法:PRAGMA EXCEPTION_INIT (exceptionerror_number); 
自定异常,先要在声明部分声明用自定异常的名称,法: 
exception EXEPTION; 
然后在行部分,使用RAISE式引异常,法:RAISE exception 
当一个子
块处理异常后,它会正常束,并且控制在封闭块enclosing block)的子END句后恢。如果PL/SQL了异常,而当前没有异常的理程序,异常会在封闭块播,直到它找到一个理程序。如果上述均未异常,将会在主机境中引起一个未理异常。当异常播到封闭块时的其余部分将被绕过 
一些的异常: 
NO_DATA_FOUND 
SELECT查询没有返回数据。 
TOO_MANY_ROWS 
SELECT查询返回多行数据。 
INCALID_CURSOR 
生非法游操作。 
ZERO_DIVIDE 
试图0除。 
DUP_VAL_ON_INDEX 
试图在具有唯一索引的字段中插入重复值 
WHEN OTHERS
子句放置在所有其他异常理自居的后面,用于所有未示列出的异常

阅读(972) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~