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 的,都必须赋初始值。
浙公网安备 33010602011771号