首页 > 代码库 > PL/SQL编程(一)

PL/SQL编程(一)


1   PL SQL概念
    PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。
    PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,
    所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码的过程性单元中,
    通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。

2    开发工具
    (1) SQL Plus: Oracle公司的工具
    (2) PL/SQL Developer: 一个独立的集成开发环境(IDE)

    
3    PL/SQL 编程分类
    1 过程(存储过程)
    2 函数
    3 触发器
    4 包
    5 其它
    
4    注释
    单行注释:-要注释的内容
    多行注释:/*要注释的内容*/
    
5    标识符规范(仅供参考)
    变量:用v作为前缀
    常量:用c作为前缀
    游标:用cursor为后缀
    异常:用e作为前缀
    
6    PL/SQL块结构
    声明(定义)部分:使用关键字 declare 定义变量、游标等等
    执行部分:以 begin 关键字开始
    异常控制部分: 捕获执行中产生的错误
    结束部分:以end关键字结尾
    
    例1:
    SQL>
set serveroutput on --打开输出选项
        begin
            dbms_output.putline(‘Hello PL/SQL !‘);
        end;
    例2
    SQL>declare
        v_ename varchar2(5);    --定义一个字符串变量
        begin
            select ename into v_ename from emp where empno = &no;
            dbms_output.put_line(‘姓名:‘ || v_ename);
        end;
    说明:& 表示要从控制台输入的变量

    例3
    SQL>declare  v_ename varchar2(5);    --定义一个字符串变量
        begin
            select ename into v_ename from emp where empno = &no;
            dbms_output.put_line(‘姓名:‘ || v_ename);
            --下面是异常处理
            exception
            when no_data_found then
                dbms_output.put_line(‘出现错误!‘);
        end;
        注意:no_data_found 表示一种异常,即如果用户输入的参数"&no" 查不出数据
        
7    创建存储过程
    SQL>
create procedure sp_proName1(spName varchar2,newSalary number) is
        begin
        update emp set sal =newSalary where ename = spName
        end;
    
8    执行存储过程
    语法:exec 存储过程名称(参数);
    SQL>exec sp_proName1(‘OBAMA‘,10000);
    
9    创建函数
    语法:create function 函数名称(参数) return 返回值;
    
10    调用函数(SQL Plus)
    语法:(1) var 变量1 类型;                        // 定义变量用来保存调用函数后返回的结果
          (2) call 函数名称(参数) into:变量1;         // 使用call关键字调用函数,并将函数返回的结果保存在变量1中
          (3) print 变量1;                            // 显示结果
          
11    包的创建
    包:函数和存储过程的组合
    语法: create package 包名称 is procedure 存储过程名称(参数);
          function 函数名称(参数) return 变量;
          end;
          
12    创建包体(Package Body)
    语法:create package body 包体名称 is
          ...            //存储过程创建过程
          ...            //函数创建过程
          end;
    
13 调用包的函数和存储过程
      调用存储过程
      语法:call 包名.存储过程名称(参数);
      调用函数
      语法:call 包名.函数名称(参数);
      注意: call关键字也可以换成 exec
    
14    触发器
         触发器是指隐含执行的存储过程。当定义触发器时必须指定触发的事件和触发的操作。
        使用create trigger 来创建触发器
    

15    游标

        (暂略)

    
16    if语句的使用
       
SQL> create or replace procedure Name1(spName varchar2) is
                  v_salary emp.sal%type;
                  begin
                  select sal into v_salary from emp where ename = spName;
                  if v_salary < 3000 then
                  update emp set sal=sal * 1.2 where ename = spName;
                  end if;
                  end;
    
17    if...then...else语句
    SQL>
create or replace procedure Name1(spName varchar2) is
         v_salary emp.sal%type;
         begin
         select sal into v_salary from emp where ename = spName;
         if v_salary < 3000 then
            update emp set sal=sal * 1.2 where ename = spName;
         else
            update emp set sal=sal * 1.05 where ename = spName;
         end if;
         end;
    
18    使用loop循环
    
SQL> create or replace procedure Name1(spName varchar2) is
         v_num :=1;
         begin
         loop
            insert into users values (v_num,spname);
            exit whrn v_num=10;
            v_num := v_num + 1;
         end loop;
         end;
    注意:在这里“:=”表示赋值的意思
    
19    使用 while 循环    
    SQL>create or replace procedure Name1(spName varchar2) is
         v_num :=1;
         begin
         while v_num <10 loop
            insert into users values (v_num,spname);
            v_num := v_num + 1;
         end loop;
         end;