Oracle PL/SQL编程基础

1.PL/SQL简介
        定义:是Oracle在标准SQL语言上的过程性扩展.是结构化的查询语句.
        优点和特性:
        (1)提高应用程序的运行性能
            存储过程或SQL块-提高效率,还颁布对数据数据进行缓存.最大优点是可以降低网络开销,提高应用程序性能.
        (2)提高模块化的程序设计功能
            为了简化客服端应用程序的开发和维护工作,在应用程序中调用子程序实现相应的程序功能.
        (3)允许定义标示符
             为了使得应用程序模块与应用环境交互,需要定义变量,常量,游标,和异常等各种标示符.
        (4)具有过程语言控制结构
            允许在PL/SQL块中使用各种类型的条件分支语句和循环语句.(分支控制语言,循环语句等编程语句,使结构化的查询语言具有编程语言)
        (5)具有良好的兼容性
            可选内置程序包,也可以在Oracle所提供的应用开发工具Deveolper中使用PL/SQL开发客户端的过程,函数和触发器.
       (6)处理运行错误
            能做DML数据操作语句,事务控制,不能做DDL(数据定义语言).

2.PL/SQL语言基础
     组成:包括数据查询语言(select),数据操纵语言(insert,delete,update),事务控制语言(commit,rollback,savepoint),数据定义语言(create,alter,dorp)和数据控制语言(grant,revoke)等5个部分.

3.PL/SQL块
     块是PL/SQL的基本程序单元,PL/SQL块由三个部分组成,定义部分,执行部分,和异常处理部分.
       定义部分:用于常量,变量,游标,异常及其复杂的数据类型.
     执行部分:用于实现应用模块功能,该部分包括要执行的PL/SQL语句和SQL语句.
      异常处理部分:用于处理的执行部分可能出现错误的运行错误.
         例如:declare
               v_ename varchar2(20);--定义部分
          begin
                --执行部分
              select ename into v_ename from scott.emp where empno=&empno;
              dbms_putout.put_line('员工姓名:'||v_ename);
          exception
                   --异常处理部分
              when no_data_found then
              dbms_putout.put_line('请输入正常的员工号')
         end;

4.PL/SQL数据类型
     标量类型:
                 varchar2(n),
            char(n),
            number(p,s),
            date:用于定义日期和时间类型,固定长度为7个字节长度.
              timestamp:定义日期和时间数据,赋值方法和date类型的方法一致.
            boolean:定义布尔变量,其变量的值为true,false或null.(在定义表的列类型是不能定义BOOLEAR类型)
              ":=":分号加等号用于给变量赋值,"||"用于链接字符串,"&"用于定义输入.
     属性类型:
           %type:类型引用,%rowType用于行类型的引用.

5.PL/SQL控制结构   

    条件分支:用于依据特定的情况选择执行的操作.    

        语法:if 条件 then       

            elsif 条件 then       

            else     .....         

           end if;

           例如:declare   

              v_sal number(6,2); 

                begin    

               select sal into v_sal from scott.emp where ename=trim('&ename');

                if v_sal<200 then    

                 update scott.emp set sal=v_sal+200 where ename=trim('&ename');  

               end if;        

            end;

      case语句:执行多重条件分支,  

             语法:case selector   

                  when expession then     

                    处理语言    

                 else

                end case;

              注释:selector用于指定条件值的表达式,expession用于指定条件值的表达式.   

             例如:declare    

                 v_deptono scott.emp.deptno%type;    

                  begin  

                   v_deptno:=&deptno;    

                case v_deptno   

                  when 10 then  

                        update scott.emp set comm=100 where deptno=v_deptno;  

                   when 20 then       

                     update scott.emp set comm=80 where deptno=v_deptno;  

                   when 30 then     

                      update scott.emp set comm=60 where deptno=v_deptno;   

                  else     

                       dbms_putout.put_line('不存在该部门');   

                end case;     

                 end;   

      循环语句:在PL/SQL块要重复执行一条语句或者一组语句,可使用循环控制语句,    

           该结构有三种语句:分别是基本循环,w]hile循环和for循环

                         基本循环:使用该语句时,无论条件是否满意,语句至少会执行一次.      

             语法:loop    

                  逻辑处理....       

                   Exit when 条件表达式  

                     end loop;      

             例如:declare      

                i int :=1;     

                    begin           

                     loop       

                       dbms_output.put_line(i);    

                        exit when i=10;   

                      end loop;     

                    end;    

      while循环:只有满足循环条件,才会执行循环体内的语句.      

           语法:while 条件表达式 loop      

                逻辑处理....    

                   end loop;    

             例如:declare      

                 i int:=1;    

              begin       

                while i<10 loop       

                    dbms_output.put_line(i)  

                         i:=i+1;        

                 end loop;         

                   end;    

      for循环:它的循环控制变量有Oracle隐含定义,且只能是number类型.   

             语法:for 条件表达式 loop  

                  逻辑处理....     

                  end loop;     

           例如:declare

                   i int:=1;     

                  begin     

                for i in i..10 loop

                      dbms_output.put_line(i);

                end loop;      

               end;

6.异常处理:异常处理是PL/SQL的标示符,默认情况下当发生异常时会终止PL/SQL的执行.Oracle提供了预定义异常,非定义异常和自定义异常等三种类型.
              语法:exception
              when 条件表达式 then
                   when 条件表达式 then
          例如:declare   
             v_name scott.emp.ename%type;
          begin
             select ename into v_name from scott.emp where empno=&empno;
                    dbms_output.put_line(v_name);
                      exception
             when no_date_found then
             dbms_output.put_line('员工编号不正确,请输入正确');
           end;
     处理预定义异常:d当PL/SQL应用程序违反Oracle规则或系统限制时,会隐含的触发一个内部异常.
        常用的预定义:
           case_not_found:对应ORA-06592错误,
           currsor_aleardy_open:对应ORA-06511错误,当打开已经打开的游标时,会隐含触发该异常.
           invalid_number:对应ORA-01722错误,当不能有效的吧字符串转化为数字时,会隐含触发该异常.
           too_many_rows:对应ORA-01476错误,当执行select into子句时,如果返回超过一行就会触发该异常.
           zero_dovide:对应ORA-01476错误,如果除数为0,触发该异常.
               no_date_found:对应ORA-01403错误,当执行select into未返回行,或者引用了索引表未初始化元素时,会隐含触发该遗产.
    处理自定义异:自定义异常必须是显示触发,使用自定义异常的步骤包括定义异常,显示触发异常和引用异常.

7.游标:当在PL/SQL块中执行查询语句和数据操纵语句时,为了处理select语句返回的多行数据,开发人员必须使用显示游标.
            语法:第一步:定义游标
           第二步:打开游标
           第三步:提取数据
           第四步:关闭游标
         显式游标属性:
          %isopen:判断游标是否打开.
          %found:检查游标是否从结果集中提取数据.
          %not found该属性与%found属性x相反.

posted @ 2014-01-03 14:17  十年尘梦  阅读(373)  评论(0编辑  收藏  举报