PL/SQL
PL
/SQL优点:
1
.良好的交互性
2
.无法替代的触发器功能
3
.自动优化(尤其针对余大循环,
PL
/SQL性能更优)
PL
/SQL块的结构
DECLARE
声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数
BEGIN
执行部分: 过程及SQL 语句 , 即程序的主要部分 【执行部分是必须的】
EXCEPTION
执行异常部分: 错误处理
END
;
打开输出缓冲区命令:
SET
serveroutput
ON
;
PL
/SQL示例:
BEGIN
dbms_output.put_line(
'Hello world!'
);
END
;
DECLARE语句中声明的变量,不要与表名或者列名重复,Oracle在执行时会优先与表名和列名匹配从而替代后执行。
PL
/SQL中表名列名不能使用变量进行指定。 【Oracle只会将=右边的变量进行替换】
记录类型:
TYPE
record_type
IS
RECORD
(
变量1 类型 [
NOT
NULL
] [:= 默认值],
变量2 类型 [
NOT
NULL
] [:= 默认值],
. . . . . .
变量n 类型 [
NOT
NULL
] [:= 默认值]
);
记录类型使用的例子:
DECLARE
TYPE
test_rec
IS
RECORD
(
Code
VARCHAR2
(
10
),
Name
VARCHAR2
(
30
)
NOT
NULL
:=’a book’);
V_book test_rec;
V_book2 test_rec;
BEGIN
V_book.code :=’
123
’;
V_book.name :=’ C++ Programming’;
DBMS_OUTPUT.PUT_LINE(v_book.code||v_book.name);
SELECT
bookCode,bookName
INTO
V_book2.code,V_book2.name
FROM
bookInfo
WHERE
ID
=
1
;
END
;
使用%
TYPE
: 定义一个变量,其数据类型与已经定义的某个数据变量的类型相同,或者与数据库表的某个列的数据类型相同,这时可以使用%
TYPE
。
例:
DECLARE
-- 用 %TYPE 类型定义与表相配的字段
TYPE
t_Record
IS
RECORD
(
T_no emp.empno%
TYPE
,
T_name emp.ename%
TYPE
,
T_sal emp.sal%
TYPE
);
使用%
ROWTYPE
:返回一个记录类型, 其数据类型和数据库表的数据结构相一致。
例:
DECLARE
emp1 emp%
ROWTYPE
BEGIN
SELECT
ID
,
NAME
INTO
emp1
WHERE
ID
=
3
;
END
;
运算符和表达式: 略
简单循环:(a). Loop循环
LOOP
要执行的语句;
EXIT
WHEN
<条件语句>;
/*条件满足,退出循环语句*/
END
LOOP
;
例:
DECLARE
int
NUMBER
(
2
) :=
0
;
BEGIN
LOOP
int
:=
int
+
1
;
DBMS_OUTPUT.PUT_LINE(
'int 的当前值为:'
||
int
);
EXIT
WHEN
int
=
10
;
END
LOOP
;
END
;
(b). While循环
WHILE
<布尔表达式>
LOOP
要执行的语句;
EXIT
WHEN
[条件];
----条件满足,提前退出循环
END
LOOP
;
(c).数字式循环
FOR
循环计数器
IN
[
REVERSE
] 下限 .. 上限
LOOP
要执行的语句;
END
LOOP
;
例:
FOR
k
IN
1
..10
LOOP
dbms_output.put_line(i);
END
LOOP
;
标号和GOTO:
GOTO
label
;
. . . . . .
<<
label
>>
/*标号是用<< >>括起来的标识符 */