一,简介
PL/SQL是Procedure Language & Structured Query Language的缩写。
可运行SQL语句,可定义变量,可执行逻辑。
可执行的SQL语句有INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。
二,基本语法
1,结构
2,变量
1> 变量的声明和赋值
2> 变量的命名规则
3> 变量的数据类型
a> 基本类型
TO_CHAR()
TO_DATE()
b> 自定义类型
i> 基本类型
3,运算符
2>CASE语句
3>LOOP循环语句
4>WHILE循环语句
5>FOR循环语句
6>GOTO语句
PL/SQL是Procedure Language & Structured Query Language的缩写。
可运行SQL语句,可定义变量,可执行逻辑。
可执行的SQL语句有INSERT,UPDATE,DELETE,SELECT INTO,COMMIT,ROLLBACK,SAVEPOINT。
二,基本语法
1,结构
DECLARE
/*声明部分:声明变量,类型,游标,局部存储过程和函数*/
BEGIN
/*执行部分:SQL语句,执行逻辑*/
EXCEPTION
/*异常部分:异常处理*/
END;
2,变量
1> 变量的声明和赋值
v_name 数据类型 [:= 初始值];
2> 变量的命名规则
标识符 | 命名规则 | 例子 |
程序变量 | V_name | V_name |
程序常量 | C_name | C_company_name |
异常标识 | E_name | E_too_many |
SQL*Plus替代变量 | P_name | P_sal |
绑定变量 | G_name | G_sal |
游标变量 | Tablename_cursor | Emp_cursor |
表类型 | Tablename_record_type | Emp_record_type |
记录类型 | Name_record | Emp_record |
3> 变量的数据类型
a> 基本类型
类型 | 子类 | 说明 | 范围 | ORACLE限制 |
NUMBER(p,s) | Dec Double precision Integer Int Numeric Real Small int | 小数,NUMBER 的子类型 高精度实数 整数,NUMBER 的子类型 整数, NUMBER 的子类型 与NUMBER等价 与NUMBER等价 整数, 比 integer 小 | ||
BINARY_INTEGER | 带符号整数,为整数计算优化性能 | |||
CHAR | Character String Rowid Nchar | 定长字符串 民族语言字符集 | 0-32767 可选,确省=1 | 2000 |
VARCHAR2 | Varchar, String NVARCHAR2 | 可变字符串 民族语言字符集 | 0-32767 4000 | 4000 |
LONG | 变长字符串 | 0->2147483647 | 32,767字节 | |
DATE | 日期型 | 公元前4712年1月1日至 公元后4712年12月31日 | ||
BOOLEAN | 布尔型 | TRUE,FALSE,NULL | 不使用 | |
ROWID | 存放数据库行号 | |||
UROWID | 通用行标识符,字符类型 |
转换
TO_NUMBER()TO_CHAR()
TO_DATE()
b> 自定义类型
i> 基本类型
TYPE record_type IS RECORD(
name VARCHAR2(20),
address VARCHAR2(20)
);
rec record_type;
ii>
列类型%TYPE
TYPE record_type IS RECORD(
T_no emp.empno%TYPE,
T_sal emp.sal%TYPE
);
rec record_type;
iii>
行类型%ROWTYPE
rec emp%ROWTYPE;
3,运算符
符号 | 意义 |
+ | 加号 |
- | 减号 |
* | 乘号 |
/ | 除号 |
:= | 赋值号 |
=> | 关系号 |
.. | 范围运算符 |
|| | 字符连接符 |
= | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于或等于 |
>= | 大于或等于 |
AND | 逻辑与 |
OR | 逻辑或 |
NOT | 取反 |
IS NULL | 是否空值 |
BETWEEN | 是否介于两者 |
IN | 是否在一列值中 |
4,控制语句
1>IF语句
IF <布尔表达式> THEN
PL/SQL 和 SQL语句;
ELSIF <布尔表达式> THEN
PL/SQL 和 SQL语句;
ELSE
其它语句;
END IF;
2>CASE语句
CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
[ELSE resultN+1]
END;
3>LOOP循环语句
LOOP
PL/SQL 和 SQL语句;
EXIT WHEN <布尔表达式> /*条件满足,退出循环语句*/
END LOOP;
4>WHILE循环语句
WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;
5>FOR循环语句
FOR 循环计数器 IN [REVERSE] 下限..上限 LOOP
要执行的语句;
END LOOP;
6>GOTO语句
<<label>>
GOTO label;