PLSQL在工作中断断续续会用到,每次用的时候,都需要查资料,熟悉一下语法格式.现在特记录下来,免得以后使用过程中,总是查资料.
块的分类
块可以分为以下四类
1)无名块:动态构造并只能执行一次。
2)命名块:前面加了标号的无名块
3)子程序:包括储存在数据库中的储存过程,函数和包.这些块一旦被定义后,便可随时调用。
4)触发器:它是储存在数据库中的块,这些块一旦被构造后,就可以多次执行。当触发它的事件发生时调用该触发器。触发事件是指对表中数据的操作,如插入,删除和修改.
复合类型
在PL/SQL中有两种复合类型
1)记录 2)表
记录 (相当于结构体)
TYPE recode_type IS RECORD
(
field1 type1 [NOT NULL] [:=expr1],
field2 type2 [NOT NULL] [:=expr2],
......
field3 type3 [NOT NULL] [:=exprn]
);
其中record_type表示记录类型的名字,field表示记录里域的名字,type表示记录里域的类型,expr表示为域赋的初始值.
当定义了一个记录类型后,就可以声明记录类型的变量了.
DECLARE
TYPE t_AuthRec IS RECORD
(
AuthorCode VARCHAR2(10),
Name auths.name%type,
Birthdate auths.birthdate%yepe,
EntryDateTime auths.entry_date_time%type
);
声明t_ArticleRec 记录类型的变量
v_Article1 t_AuthRec ;
v_Article2 t_AuthRec ;
当定义了一个记录类型变量后,可以按照下面的语句引用记录中的域:
recode_name.fiele_name
不仅可以为记录的域赋值,具有相同类型的两个记录也可以相互赋值。
v_Article1 := v_Article2
也可用select语句来为记录赋值,这种方法是从数据库表中检索出数据,然后将他们存入记录中,要注意,记录中的域的类型一定要和SELECT列表中域的类型一致。
SELECT author_code,name,birthdate,entry_date_time
INTO v_Author
FROM auths
WHERE author_code = 'A00009';
在PLSQL中经常会遇到这样的声明---声明一个与数据库表中各类型相同的记录。为了简化这种记录的声明,PLSQL提供了%ROWTYPE操作符,类似于%TYPE.
%ROWTYPE返回一个记录类型,这个记录类型中域类型与定义该记录的表中各列的类型相同。
下面定义了一个与表article相同的记录:
v_Article article%ROWTYPE;
使用%ROWTYPE声明的记录包括数据库表中列的NOT NULL约束,但包括VARCHAR2列和CHAR列的长度,number列的精度和标度,当表定义发生改变时,%ROWTYPE声明的记录也发送相应的改变.