zoukankan      html  css  js  c++  java
  • 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相反.

  • 相关阅读:
    利用Python获取文件类型
    删除目录和文件
    创建目录和空文件
    读取文件内容
    sort方法
    python实例5-表格打印
    ngx.lua中遇到的小问题
    mysql 更改自动增长字段值的重新设定
    全面讲解进程池原理
    测试工程师Docker基础
  • 原文地址:https://www.cnblogs.com/ranfang/p/3503635.html
Copyright © 2011-2022 走看看