Oracle学习笔记(二十二)——块

时间:2022-12-26 11:41:39
1、简单分类
Oracle学习笔记(二十二)——块

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就是找不到数据的例外。