《SQL 21日自学通(V3.0)(PDF格式)》第124章


statement2; 
。 
END 
386 
…………………………………………………………Page 387……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
FETCH 
FETCH 可以从一个指针中取得变量的值 这里有两个使用 FETCH 的例子 一个是取 
得一个集合变量 另外了个则取得特定的变量 
INPUT 
DECLARE 
cursor employee_cursor is 
select emp_id; emp_name from employees; 
employee_record employee_cursor%ROWTYPE; 
BEGIN 
open employee_cursor; 
loop 
fetch employee_cursor into employee_record; 
end loop; 
close employee_cursor; 
END 
分析 
上一个例子中将一个指针所指的行的数据赋给了一个名字叫 employee_record 的变量 
它使用 LOOP 循环来移动指针 当然 这个块事实上没有做任何工作 
DECLARE 
cursor employee_cursor is 
select emp_id; emp_name from employees; 
id_num employees。emp_id%TYPE; 
name employees。emp_name%TYPE; 
BEGIN 
open employee_cursor; 
loop 
fetch employee_cursor into id_num; name; 
end loop; 
close employee_cursor; 
387 
…………………………………………………………Page 388……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
END 
分析 
在这个例子中是把当前的指针所指的行的对应数据填入变量 id_num 和 name 中 这两 
个变量是在 DECLARE 部分中定义的 
CLOSE 
如果你已经在一个块中结束了对指针的使用时 你应该将这个指针关闭 与你通常在 
读完一本书以后要将书合上一样 你应该使用 CLOSE 命令来关闭指针 
语法 
BEGIN 
open employee_cursor; 
statement1; 
statement2; 
。 
。 close employee_cursor; 
END 
分析 
当关闭一个指针以后 查询的结果集就不复存在了 如果你想访问结果集中的数据你 
必须重新打开指针才行 
条件语句 
现在我们得到了非常有用的东西来控制我们的 SQL 语句的运行 在 PL/SQL 中的条件 
语句与大多数第三代编程语言是类似的 
IF THEN 
在大多数编程中 IF THEN 语句可能是得常用的语句了 它决定了对于特定的条件 
应当执行哪一部分的操作 其结构如下 
语法 
388 
…………………………………………………………Page 389……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
IF condition1 THEN 
statement1; 
END IF 
如果你需要对这两种情况进行分别处理 那么你可以将语句形式写成下边的样子 
语法 
IF condition1 THEN 
statement1 
ELSE 
statement2 
END IF 
如果你需要进行判断的条件多于两个 那么语句可以写成下边样子 
语法 
IF condition1 THEN 
statement1 
ELSIF condition2 THEN 
statement2 
ELSE 
statement3 
END IF 
分析 
在最后一个例子中 如果满足条件 1 那么就执行语句 1 如果满足条件 2 那么就会 
执行语句 2 否则的话就会执行语句 3 条件语句也可以嵌于其他语句和 LOOP 循环中 
LOOPS 循环 
LOOPS 在 PL/SQL 的语句块中将不断地执行过程直到指定的条件满足为止 一共有三 
种循环 
LOOP 本身是一个无限的循环 它经常在指针中使用 如果你想终止这种循环 你必 
须指定在什么时候退出 例如 在循环中翻阅指针的时候你可以指定当指针处于最后一行 
的时候退出循环 见下例 
389 
…………………………………………………………Page 390……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
输入 
BEGIN 
open employee_cursor 
LOOP 
FETCH employee_cursor into employee_record 
EXIT WHEN employee_cursor%NOTFOUND 
statement1 
END LOOP 
close employee_cursor 
END 
%NOTFOUND 是指针的一种属性 它表明在当前指针中没有任何数据 在上一个例 
子中如果指针没有发现数据就会退出循环 假如你在循环中忽略了这条语句 循环将会一 
直进行下去 
WHILE…LOOP 则是在当条定条件满足时执行特定的语句 而当条件不在满足时就会从 
循环中退出转而执行下一条语句 
输入 
DECLARE 
cursor payment_cursor is 
select cust_id; payment; total_due from payment_table 
cust_id payment_table。cust_id%TYPE 
payment payment_table。payment%TYPE 
total_due payment_table。total_due%TYPE 
BEGIN 
open payment_cursor 
WHILE payment 《 total_due LOOP 
FETCH payment_cursor into cust_id; payment; total_due 
EXIT WHEN payment_cursor%NOTFOUND 
insert into underpay_table 
values (cust_id; "STILL OWES") 
390 
…………………………………………………………Page 391……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪 
END LOOP 
close payment_cursor 
分析 
在上一个例子中使用了 WHILE…LOOP
小说推荐
返回首页返回目录