PL/SQL块分类
1、无名块或匿名块(Anonymous):动态构造,只能执行一次,可调用其他程序,但不能被其他程序调用。
2、命名块(Named):带有名称的匿名块,这个名称就是标签。
3、子程序(SubProgram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其他程序中调用。
4、触发器(Trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
5、程序包(Package):存储在数据库中的一组子程序、变量定义。
标识符
标识符
命名规则 | 例子 | |
程序变量 | v_name | v_name |
程序常量 | c_name | c_company_nme |
游标变量 | cursor_name | cursor_emp |
异常标志 | e_name | e_too_many |
表类型 | name_table_type | emp_record_type |
表 | name_table | emp_table |
记录类型 | name_record | emp_record |
绑定变量 | g_name | g_year_sal |
属性类型
1、%TYPE
定义一个变量,其数据类型与已经定义的某个数据变量(尤其是表的某一列)的数据类型相一致,这时可以使用%TYPE。
使用%TYPE特性的优点在于:
1)所引用的数据库列的数据类型可以不必知道
2)所引用的数据库列的数据类型可以实时改变,容易保持一致,不用修改PL/SQL程序
2、%ROWTYPE
返回一个记录类型,其数据类型和数据库表的数据结构相一致,这时可以使用%ROWTYPE。
使用%ROWTYPE特性的优点在于:
1)所引用的数据库中的列的个数和数据类型可以不必知道
2)所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致,不用修改PL/SQL程序
--%TYPE用法 DECLARE v_ename emp.ename%TYPE; BEGIN SELECT ename INTO v_ename FROM emp WHERE empno = ‘7369‘; Dbms_Output.put_line(‘雇员姓名‘||v_ename); END; --%ROWTYPE用户 DECLARE emp_record emp%ROWTYPE; BEGIN SELECT * INTO emp_record FROM emp WHERE empno = ‘7369‘; Dbms_Output.put_line(‘雇员姓名‘||emp_record.ename||‘,职业‘||emp_record.job); END;
循环结构
LOOP循环语法:
LOOP
要执行的语句;
EXIT WHEN <条件语句> --条件满足,退出循环语句
END LOOP;
顺序控制
顺序控制用于按顺序执行语句。顺序控制包括:
1、GOTO语句:表示无条件跳转到指定的标号
2、NULL语句:NULL语句是一个可执行语句,可以用NULL语句来说明“不用做任何事件”的意思,相当于一个占位符或不执行任何操作的空语句,可以使某些语句变得有意义,提高程序的可读性,保证其他语句结构的完整性和正确性。
需求:循环显示变量v_count的值,如果该值大于10则结束循环,并显示该 变量最终值。
DECLARE v_count NUMBER := 1; BEGIN LOOP Dbms_Output.put_line(‘v_count的当前值为:‘||v_count); v_count := v_count + 1; IF v_count > 10 THEN GOTO labelOffLoop; ELSE NULL; END IF; END LOOP; <<labelOffLoop>> Dbms_Output.put_line(‘v_count的当前值为:‘||v_count); END;