1.pl/sql支持用户自定义类型。
TYPE MY_TYPE is RECORD(
AUTHOR varchar2(10),
NAME varchar2(12),
TIME date
)
2.PL/SQL8以上版本支持对象类型,他可以存储在数据库表中。
示例:
create or replace type AUTHOROBJ as OBJECT(
AUTHOR_CODE char(6),
NAME char(7),
SEX char(1),
BIRTHDAY date
)
3.常量的定义必须增加一个关键字constant
示例:SEX_MALE constant int := 1;
SEX_FAMALE constant int := 0;
4.PL/SQL中的循环
a. loop
要执行的语句
exit when 条件
end loop;
b. for loopCounter in 1..50 loop
要执行的语句
end loop;
c.while 条件
loop
执行的语句
end loop
2013年11月8日 星期五
5.游标
declare
V_NAME varchar2(20);
V_SEX char(1);
coursor MYCOURSOR is
select NAME,SEX from AUTHS;
begin
open MYCOURSOR;
loop
fetch MYCOURSOR into V_NAME,V_SEX;
exit when MYCOURSOR%notfound
end loop;
close MYCOURSOR;
end;
6.块的分类
无名块:动态构造并只能执行一次
命名块:前面加了标号的无名块。在无名块declare前添加标号 就变成有名块。块前的标号必须用<< >>括起来;end后也可以添加标号,可有可无且无须用<< >>括起来
子程序:包括存储在数据库中的存储过程、函数和包等。这些块一旦被定义后,便可以随时调用
触发器:它是存储在数据库中的块,这些块一旦被构造,就可以执行多次,当触发它的事件发生时调用触发器。触发事件是指对表中数据的操作,如增删改
PS:如果希望标识符能够区分大小写或者包含其他字符,可以使用带双引号的标识符。除了双引号,任何可以打印的字符都可以作为标识符的一部分。但是,改标识符最大长度不能是30个字符(不包括双引号)。如果使用带引号的标识符,则可以使用保留字作为变量名。
7.数据类型
1.标量类型
numberic
character
raw
rawId
date
boolean
trusted
I numberic用来存放整数、实数和浮点数,包括如下三中类型
binary_integer
number
pls_integer
注:关于nuber的四舍五入问题
number(precision,scale),其中precision表示精度,scale表示标度。通俗的将precison表示这个数字占的位数,scale表示从什么位置进行四舍五入。
当标度确定的数字超过精度时,报错
8.一些类型转换函数:
to_char 将number或date类型的数值转换为varchar2类型的值
to_date 将character类型的数值转换为date类型
to_number 将character类型的值转换为number类型
另:
rawtohex 将row类型的值转换成十六进制的数值
hextorow 将character类型的描述的十六进制数转换为二进制
chartorowid 将character类型描述的rowID转换为二进制
rowIdtochar 将二进制形式的rowid转换为18个字符的行标识符
9.复合类型
复合类型是指具有内部成员的类型,该成员可以被单独操作。通常该类型的变量由一个或多个标量类型组成。在pl/sql中复合类型有两种:
一是记录类型,一是表
1)记录类型的定义:
type t_myType is record(
name varchar2(3),
sex char(1)
);
ps:在记录型中声明变量(域)要注意几点:
1.域的声明和记录外的变量声明类似,可以用not null约束和初始值
2.如果一个域没有被赋初始值,则系统自动将其赋值为null
3.在赋初值时,“:=”可以被关键字"defalut"代替
在记录型声明时%rowtype操作符表示和一个表中各数据列类型相同。使用%rowtype声明记录不包括数据库表中列的not null约束,但包括varchar2列和char列的长度,number列的数据精度和标度。当表的定义改变时,由%rowtype声明的记录也发生相应的改变。
10.变量的作用域和可视域
变量的作用域是指变量在程序中的有效范围。对于一个pl/sql变量,它的作用域是从该变量声明开始到变量所在块结束。当变量超过了这个范围,则pl/sql引擎将释放存放该变量的空间,这个变量就不存在了,也就无法访问了。
变量的可视域是指在变量前不加以限定就能够直接访问该变量的那一段程序。变量可视域总在作用域之内,如果变量超出了作用域,则这个变量也将不可视。
如果在子块中声明了和父块相同的变量,在字块中只有子块声明的变量是可视,但是父块变量的作用域包含子块。如果要引用父块的变量需要添加限制。可以使用标识号来进行限定。如:
ps:如果两个相同级别的块,则不能在一个块中引用另一个块中的变量。
11.注释:
单行注释: 两个短撗‘--’ 多行注释: /* */
注释嵌套:多行注释可以嵌套单行注释,但不可以嵌套多行注释;
单行注释可以嵌套单行注释,也可以嵌套多行注释,但是多行注释不可转行
12.流程控制语句
if语句
循环语句
顺序控制语句(goto语句 和Null语句)
1)if语句
if then else
if then elsif then else
2)循环语句:
a loop end loop;
exit:表示无条件跳出循环
exit when : 表示当when条件成立时跳出循环。
b.for v_num in reverse 1..9 loop
dbms_output.put_line(v_num);
end loop;
关键字reverse表示v_num从结束值递减到初始值。
ps:如论是递减还是递增初始值都要小于结束值。
c.在外层循环前添加标号当内层循环满足某些条件时直接跳出外层循环
<<out_loop>>
for .....loop
<<inner_loop>>
exit out_loop when xxxxx
end loop;
end loop out_loop;
3)goto语句使用限制:
a.不能跳转到if语句、loop语句或者子块中
b.不能从子程序中跳出
c.不能从异常处理跳转到当前块
4)null语句用于显示的指定一个什么也不做的操作,相当于一个占位符。
TYPE MY_TYPE is RECORD(
AUTHOR varchar2(10),
NAME varchar2(12),
TIME date
)
2.PL/SQL8以上版本支持对象类型,他可以存储在数据库表中。
示例:
create or replace type AUTHOROBJ as OBJECT(
AUTHOR_CODE char(6),
NAME char(7),
SEX char(1),
BIRTHDAY date
)
3.常量的定义必须增加一个关键字constant
示例:SEX_MALE constant int := 1;
SEX_FAMALE constant int := 0;
4.PL/SQL中的循环
a. loop
要执行的语句
exit when 条件
end loop;
b. for loopCounter in 1..50 loop
要执行的语句
end loop;
c.while 条件
loop
执行的语句
end loop
2013年11月8日 星期五
5.游标
declare
V_NAME varchar2(20);
V_SEX char(1);
coursor MYCOURSOR is
select NAME,SEX from AUTHS;
begin
open MYCOURSOR;
loop
fetch MYCOURSOR into V_NAME,V_SEX;
exit when MYCOURSOR%notfound
end loop;
close MYCOURSOR;
end;
6.块的分类
无名块:动态构造并只能执行一次
命名块:前面加了标号的无名块。在无名块declare前添加标号 就变成有名块。块前的标号必须用<< >>括起来;end后也可以添加标号,可有可无且无须用<< >>括起来
子程序:包括存储在数据库中的存储过程、函数和包等。这些块一旦被定义后,便可以随时调用
触发器:它是存储在数据库中的块,这些块一旦被构造,就可以执行多次,当触发它的事件发生时调用触发器。触发事件是指对表中数据的操作,如增删改
PS:如果希望标识符能够区分大小写或者包含其他字符,可以使用带双引号的标识符。除了双引号,任何可以打印的字符都可以作为标识符的一部分。但是,改标识符最大长度不能是30个字符(不包括双引号)。如果使用带引号的标识符,则可以使用保留字作为变量名。
7.数据类型
1.标量类型
numberic
character
raw
rawId
date
boolean
trusted
I numberic用来存放整数、实数和浮点数,包括如下三中类型
binary_integer
number
pls_integer
注:关于nuber的四舍五入问题
number(precision,scale),其中precision表示精度,scale表示标度。通俗的将precison表示这个数字占的位数,scale表示从什么位置进行四舍五入。
当标度确定的数字超过精度时,报错
8.一些类型转换函数:
to_char 将number或date类型的数值转换为varchar2类型的值
to_date 将character类型的数值转换为date类型
to_number 将character类型的值转换为number类型
另:
rawtohex 将row类型的值转换成十六进制的数值
hextorow 将character类型的描述的十六进制数转换为二进制
chartorowid 将character类型描述的rowID转换为二进制
rowIdtochar 将二进制形式的rowid转换为18个字符的行标识符
9.复合类型
复合类型是指具有内部成员的类型,该成员可以被单独操作。通常该类型的变量由一个或多个标量类型组成。在pl/sql中复合类型有两种:
一是记录类型,一是表
1)记录类型的定义:
type t_myType is record(
name varchar2(3),
sex char(1)
);
ps:在记录型中声明变量(域)要注意几点:
1.域的声明和记录外的变量声明类似,可以用not null约束和初始值
2.如果一个域没有被赋初始值,则系统自动将其赋值为null
3.在赋初值时,“:=”可以被关键字"defalut"代替
在记录型声明时%rowtype操作符表示和一个表中各数据列类型相同。使用%rowtype声明记录不包括数据库表中列的not null约束,但包括varchar2列和char列的长度,number列的数据精度和标度。当表的定义改变时,由%rowtype声明的记录也发生相应的改变。
10.变量的作用域和可视域
变量的作用域是指变量在程序中的有效范围。对于一个pl/sql变量,它的作用域是从该变量声明开始到变量所在块结束。当变量超过了这个范围,则pl/sql引擎将释放存放该变量的空间,这个变量就不存在了,也就无法访问了。
变量的可视域是指在变量前不加以限定就能够直接访问该变量的那一段程序。变量可视域总在作用域之内,如果变量超出了作用域,则这个变量也将不可视。
如果在子块中声明了和父块相同的变量,在字块中只有子块声明的变量是可视,但是父块变量的作用域包含子块。如果要引用父块的变量需要添加限制。可以使用标识号来进行限定。如:
ps:如果两个相同级别的块,则不能在一个块中引用另一个块中的变量。
11.注释:
单行注释: 两个短撗‘--’ 多行注释: /* */
注释嵌套:多行注释可以嵌套单行注释,但不可以嵌套多行注释;
单行注释可以嵌套单行注释,也可以嵌套多行注释,但是多行注释不可转行
12.流程控制语句
if语句
循环语句
顺序控制语句(goto语句 和Null语句)
1)if语句
if then else
if then elsif then else
2)循环语句:
a loop end loop;
exit:表示无条件跳出循环
exit when : 表示当when条件成立时跳出循环。
b.for v_num in reverse 1..9 loop
dbms_output.put_line(v_num);
end loop;
关键字reverse表示v_num从结束值递减到初始值。
ps:如论是递减还是递增初始值都要小于结束值。
c.在外层循环前添加标号当内层循环满足某些条件时直接跳出外层循环
<<out_loop>>
for .....loop
<<inner_loop>>
exit out_loop when xxxxx
end loop;
end loop out_loop;
3)goto语句使用限制:
a.不能跳转到if语句、loop语句或者子块中
b.不能从子程序中跳出
c.不能从异常处理跳转到当前块
4)null语句用于显示的指定一个什么也不做的操作,相当于一个占位符。