1.数据类型
- 标量数据类型 :数字型,字符型, 日期型和布尔型
- 属性数据类型 :%type:复制某个字段的类型;
- %rowtype:复制表的全部类型;
- 自定义数据类型:type 变量名 record (可有多个数据类型);
- binary_integer:介于-231 和 231 之间的整数。
2.PL/SQL语句格式
declare 变量赋值声明
begin
正常语句块(可镶嵌begin 语句块 end;)
exception when 异常名 then 异常处理(可忽略)
when others then 不满足以上异常时的处理
end;
3.PL/SQL语句内容
- dbms_output.put_line( ); --输出语句
- select 字段值 into 变量,from 表名 where 条件; --如果使用查询语句的值时,必须进行赋值
- 变量名 数据类型 :=初始值; --声明变量
- 变量名 constant 数据类型 :=初始值; --声明常量
- 变量名 数据类型 default --默认值
- var 变量名 数据类型 :=初始值; --全局变量,在当前操作窗口有效,一般用于测试,用 :变量名,调用全局变量;
- print 全局变量名; --查看当前变量的值
- := --赋值; .. --范围取值,如:1..5,从1到5
注解:
- PL/SQL 支持:SQL 数据操纵命令、游标控制命令、事务控制命令(commit,rollback)、SQL 函数、运算符和伪列。
- 编译→执行→储存编译好的SQL块。
- set serveroutput on :设置环境变量为打开状态,从而使pl/sql程序能够在SQL操作台中输出结果 。
4.条件控制和循环控制
注:if嵌套if时,外层if条件满足时执行内层if,如果外层if不满足时,执行elsif或者else;
注:exit when 条件; --当满足条件时,跳出循环
1.if 条件 then 语句块 elsif 条件 then 语句块 else 语句块 end if;
2.case 字段 when 条件 then 语句块 else 语句块 end case;
3.loop 循环体 end loop ; --无限循环
4.while 条件 loop 循环体 end loop; --循环
5.for 变量名 in 循环次数 loop 循环体 end loop;
注:in 从1..10,in reverse 从10..1;
6.goto 标签名1; <<定义标签名1>> 语句;--跳转到标签1
注:可以跟 goto 标签2 <<标签2>> null;相结合使用
7.动态执行语句
变量2:=0;
for x in 游标名 loop
变量1:='select count(*) from'||x.字段;
execute immediate 变量1 into 变量2
End loop;
execute immediate:=’sql语句’ using 向sql语句传递参数。--动态执行语句
绑定变量:使用动态执行语句之后使用using后使用变量
注:动态执行语句主要针对DDL语句的,DDL的语句不能直接在sql语句块来使用,参数值的变量可以做成输入框。由变量拼接而成的sql语句,也要用动态语句。
- 异常
定义异常 | |||
序号 | 异常类型 | 异常命令 | 说明 |
1 | 预定义异常 | no_data_found | 用于数据空指针异常时使用 |
2 | dup_val_no_index | 用于向唯一索引列中输入了重复值时使用 | |
3 | invalid_number | 用于处理字符串转换为数字时使用 | |
4 | too_many_rows | 用于处理查询中返回多于 1 条记录 | |
5 | zero_divide | 用于处理用 0 作为除数时的数据 | |
6 | cursor_already_open | 用于处理打开一个已经打开的游标 | |
7 | invalid_cursor | 用于处理进行非法游标操作时使用 | |
8 | 自定义异常 | declare中声明异常:异常名 exception; →begin语句块中引发:raise 异常名;→exception中捕捉处理异常:when 异常名 then 异常处理内容。 | |
9 | 引发应用程序异常 | raise_application_error(异常码,异常内容信息) | 用于自定义异常处理报错的框框 |
10 | -20000至-20999 | 异常码 | |
11 | pragma exception_init(异常名,异常码) | 在声明中进行异常码绑定 | |
12 | 注:在程序中进行引发应用程序异常时,必须进行异常码的绑定 |