3、程序数据的声明。

1)、声明一个变量:

  基本语法:name datatype [not null] [:=| default default_assignment];

    name代表变量名,datatype变量类型,not null代表不可以为空,为空会抛出异常,所以必须赋值的,最后一个default_assignment用来赋初始化值的。

  如:l_right_flavor varchar2(100) :='Any thing with chocolate,actually';

     l_right_now date not null default sysdate;--定义一个默认为系统时间的时间变量。

  Default语法和赋值语法是等价的并且可以互换使用。

2)、声明常量:

  声明常量需要加上constant关键字,并且必须要提供一个缺省值,唯一一个值。

  基本语法:name constant datatype [not null] :=| Default default_value;

  如:l_curr_year constant pls_integer :=to_number(to_char(sysdate,'YYYY')); 赋值或者使用Defalut方式。

3)、Not null语句:

  只要类型为Not null的,声明的时候,必须要给一个缺省值,如:company_name varchar2(60) not null  ----会报编译错误。

4)、锚定声明:

  '锚定'数据类型,就是告诉PL/SQL按照已经定义好的数据结构来设置变量的数据类型,例如,从一个表中抽取一个字段赋值给一个变量,这个变量的类型就是这个表的这个字段的类型。

  标量锚定:%type属性:这种方式定义的变量可以根据某个表的某列或者其他PL/SQL标量变量的来定义变量类型。

  记录锚定:%rowType属性:根据某个表的结构或者某个预定义的显式PL/SQL游标结构对变量的记录结构进行定义。

  锚定语法结构:

  variable name type attribute%type [optional default value assignment]

  variable name table_name | curso_name %ROWType[optional defalut value assignment]

  其中:varibale name 变量名称,type attribute可以是之前已经声明过的变量名称,或者表的某列(table.column)。

  注意:锚定的元素和被锚的元素,是保持着同步关系,被锚定的发生变了,原来的锚定的就无效了。

5)、游标和表的锚:%rowtype的用法

  把表中每一列都声明到一个单独变量中:

  declare

    l_book book%rowtype

  begin

    select * into l_book from book where ....

  process_book(l_book);

  End;

  利用游标,基于游标的%RowType用法:

  Declare

    cursor book_cur Is

      select author,title from book where ....

     l_book book_cur%rowtype;

  Begin

    open book_cur;

    fetch book_cur into l_book;

  End;

  最后一个游标型的For循环:

  Begin

    For book_rec in (select * from book)

    process_book(book_rec)

  end;

6)、锚定声明的好处:

  a、如果一个变量要和数据库某列保持类型一致,必须使用这种方式方便很多。

  b、最大的好处就是,定义很多变量的入口类型在同一个地方,一改全都改了。

7)、Not null数据类型的锚:

  not null类型锚会传递,就是原变量是not null 的,以后谁引用了这个变量都是not null 的,都必须赋初始值。

 

 

 

posted on 2013-06-27 09:51  Kelly_HanShuai  阅读(106)  评论(0)    收藏  举报