第四章
1. 条件语句
答:IF boolean_expression1 THEN ...
ELSIF boolean_expression2 THEN /*注意是ELSIF,而不是ELSEIF*/ ... /*ELSE语句不是必须的,但END IF;是必须的*/ ELSE ... END IF;
2. 循环语句 答:1) Loop ...
IF boolean_expr THEN /* */
EXIT; /* EXIT WHEN boolean_expr */ END IF; /* */ END LOOP;
2) WHILE boolean_expr LOOP ...
END LOOP;
3) FOR loop_counter IN [REVERSE] low_blound..high_bound LOOP ...
END LOOP;
注:a. 加上REVERSE 表示递减,从结束边界到起始边界,递减步长为一; b. low_blound 起始边界; high_bound 结束边界;
3. GOTO语句
答:GOTO label_name; 1) 只能由内部块跳往外部块; 2) 设置标签:<
IF D%ROWCOUNT = 50 THEN GOTO l_close; END IF; ...
END LOOP; <
4. NULL语句
答:在语句块中加空语句,用于补充语句的完整性。示例: IF boolean_expr THEN ... ELSE NULL; END IF;
5. SQL in PL/SQL
答:1) 只有DML SQL可以直接在PL/SQL中使用;
第五章
1. 游标(CURSOR)
答:1) 作用:用于提取多行数据集;
2) 声明:a. 普通申明:DELCARE CURSOR CURSOR_NAME IS select_statement /* CURSOR的内容必须是一条查询语句*/
b. 带参数申明:DELCARE CURSOR c_stu(p_id student.ID%TYPE) SELECT * FROM student WHERE ID = p_id;
3) 打开游标:OPEN Cursor_name; /*相当于执行select语句,且把执行结果存入CURSOR;
4) 从游标中取数:a. FETCH cursor_name INTO var1, var2, ...; /*变量的数量、类型、顺序要和Table中字段一致;*/
b. FETCH cursor_name INTO record_var;
注:将值从CURSOR取出放入变量中,每FETCH一次取一条记录; 5) 关闭游标: CLOSE Cursor_name; 注:a. 游标使用后应该关闭;
b. 关闭后的游标不能FETCH和再次CLOSE; c. 关闭游标相当于将内存中CURSOR的内容清空;
2. 游标的属性
答:1) %FOUND: 是否有值; 2) %NOTFOUND: 是否没有值; 3) %ISOPEN: 是否是打开状态;
4) %ROWCOUNT: CURSOR当前的记录号;
3. 游标的FETCH循环 答:1) LOOP
FETCH cursor INTO ...
EXIT WHEN cursor%NOTFOUND; /*当cursor中没记录后退出*/ END LOOP;
2) WHILE cursor%FOUND LOOP FETCH cursor INTO ... END LOOP;
3) FOR var IN cursor LOOP
FETCH cursor INTO... END LOOP;
第六章
1. 异常 答:DECLARE ...
e_TooManyStudents EXCEPTION; /* 申明异常 */ ... BEGIN ...
RAISE e_TooManyStudents; /* 触发异常 */ ... EXCEPTION
WHEN e_TooManyStudents THEN /* 触发异常 */ ...
WHEN OTHERS THEN /* 处理所有其他异常 */ ... END;
PL/SQL数据库编程(下)