1、简单分类
2、编写规范
1)注释
- 单行注释--(两个减号)
-
-
select * from emp where empno=7788;——取得员工信息
-
- 多行注释/*......*/
2)标识符号的命名规范
- 定义变量,建议用v_作为前缀:v_sal。
- 定义常量,建议用c_作为前缀:c_rate。
- 定义游标,建议用_cursor作为后缀:emp_cursor。
- 定义例外,建议用e_作为前缀:e_error。
3、块
1)块
- pl/sql的基本程序单元,编写pl/sql程序实际上就是编写pl/sql块。
- 要完成相对简单的应用功能,可能孩子需要编写一个pl/sql块;但是如果想实现复杂的功能,可能需要在一个pl/sql块中潜逃其它的pl/sqk块。
2)块的结构:pl/sql块由三个部分构成:定义部分、执行部分、里外处理部分。
declare
/*定义部分——定义常量、变量、游标、例外、复杂数据类型*/
begin
/*执行部分——要执行的pl/sql语句和sql语句*/
exception
/*里外处理部分——处理运行的各种错误*/
end;
- 定义部分是从declare开始的,可选。
- 执行部分是从bebin开始的,必选。
- 里外处理部分是从exception开始的,可选。
3)实例1——只包括执行部分的pl/sql块
-
SQL> set serveroutput on;--打开输出选项 SQL> begin 2 dbms_output.put_line('hello,world'); 3 end; 4 / hello,world PL/SQL procedure successfully completed
- 说明:dbms_output是oracle所提供的包(类似java的开发包),该包包含一些过程,put_line就是dbms_output的一个过程。
4)实例2——包括定义部分和执行部分的pl/sql块
-
SQL> set serveroutput on; SQL> declare 2 --定义变量 3 v_ename varchar2(5);--定义字符串变量 4 begin 5 --执行部分 6 select ename into v_ename from emp where empno=&no;--将查询到的值赋值给v_ename 7 dbms_output.put_line('雇员名:'||v_ename); 8 end; 9 / 雇员名:小红 PL/SQL procedure successfully completed
- 说明:&表示要接收从控制台输入的变量。
-
SQL> --把用户的工资也显示出来; SQL> declare 2 --定义变量 3 v_ename varchar2(5);--定义字符串变量 4 v_sal number(7,2);--定义薪水 5 begin 6 --执行部分 7 select ename,sal into v_ename,v_sal from emp where empno=&no;--将查询到的值赋值给v_ename 8 dbms_output.put_line('雇员名:'||v_ename||',薪水: '||v_sal); 9 end; 10 / 雇员名:小红,薪水: 78.9 PL/SQL procedure successfully completed
5)实例3——包括定义部分、执行部分和例外处理部分的pl/sql块
- 为了避免pl/sql程序的运行错误,提高pl/sql的健壮性,应该对可能的错误进行处理。
-
- 在实例2中,如果输入了不存在的雇员号,应当做例外处理。
-
SQL> declare 2 --定义变量 3 v_ename varchar2(5);--定义字符串变量 4 v_sal number(7,2);--定义薪水 5 begin 6 --执行部分 7 select ename,sal into v_ename,v_sal from emp where empno=&no;--将查询到的值赋值给v_ename 8 dbms_output.put_line('雇员名:'||v_ename||',薪水: '||v_sal); 9 --异常处理 10 exception 11 when no_data_found then 12 dbms_output.put_line('您的编号输入有误,请重新输入!'); 13 end; 14 / 您的编号输入有误,请重新输入! PL/SQL procedure successfully completed
- 有时出现异常,希望用另外的逻辑处理。
- 说明:oracle实现预定义了一些例外,no_data_found就是找不到数据的例外。