Oracle pl/sql简述(二)
...
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) 设置标签:<>
3) 示例:
LOOP
...
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;
2004-9-8 星期三 阴
1. 存储过程(PROCEDURE)
答:创建过程:
CREATE [OR REPLACE] PROCEDURE proc_name
[(arg_name[{IN|OUT|IN OUT}]TYPE,
arg_name[{IN|OUT|IN OUT}]TYPE)]
{IS|AS}
procedure_body
1) IN: 表示该参数不能被赋值(只能位于等号右边);
2) OUT:表示该参数只能被赋值(只能位于等号左边);
3) IN OUT: 表示该类型既能被赋值也能传值;
2. 存储过程例子
答:CREATE OR REPLACE PROCEDURE ModeTest(
p_InParm IN NUMBER,
p_OutParm OUT NUMBER,
p_InOutParm IN OUT NUMBER)
IS
v_LocalVar NUMBER; /* 声明部分 */
BEGIN
v_LocalVar:=p_InParm; /* 执行部分 */
p_OutParm:=7;
p_InOutParm:=7;
...
EXCEPTION
... /* 异常处理部分 */
END ModeTest;
3. 调用PROCEDU