初学Oracle

数据库编程之过程化SQL
一、过程化SQL的块结构

  定义部分 :

    DECLARE                                       /* 定义的变量,常量等只能在该基本快中使用 */
    变量,常量,游标,异常等              /*当基本块执行结束时,定义就不再存在

       执行部分:

    SQL语句,过程化SQL的流程控制语句
         EXCEPTION      /*遇到不能继续执行的情况称为异常/
         END;

二、变量和常量的定义

  1.变量定义
    变量名 数据类型 [[ NOT NULL]:= 初值表达式] 或者 变量名 数据类型 [[NOT NULL] 初值表达式]
  

  2.常量定义

    常量名 数据类型 CONSTANT :=常量表达式
    常量必须要给一个值,并且该值在存在期间或常量的作用域内不能改变。如果试图修改它,过程
  化SQL将返回一个异常
    赋值语句
      变量名:=表达式

  3.流程控制
    1.条件控制语句
      1)IF 语句
        IF condition THEN
          Sequence_of_statements1; /*为真执行语句
        ELSE
          Sequence_of_statements2; /*为假或者NULL语句执行
        END IF

    2.嵌套控制语句
      1)最简单的循环语句LOOP
        LOOP
          Sequence_of_statements;
        END LOOP;
     多数数据库服务器的过程化SQL都提供EXIT,BREAK或 LEAVE等循环语句以保证LOOP语句快能够
     在适当的条件下提前执行提前结束下一个语句。
     2)FOR-LOOP

        FOR count IN [REVERSE] bount1...bount2 LOOP
          Sequence_of_statements;
        END LOOP;
      FOR循环的基本执行过程:
              将count设置为循环的下界bound1,检查它是否小于商界bound2.当指定REVERSE时则将count
      设置为循环的上界bound2,检查count是否大于下届bound1。如果越界则执行跳出循环,否则
      执行循环体,然后按照步长(+1或-1)更新count的值,重新判断条件。    

    3)错误处理
        如果过程化SQL在执行时出现异常,则应该让程序在产生异常的语句处停下来,根据异常的类型

      去执行异常处理语句。SQL标准对数据库服务器提供什么样的异常处理做出了建议,要求过程化

      SQL管理器提供完善的一次处理机制。

三、存储过程和函数
  过程化SQL快主要有命名块和匿名块。匿名块每次执行时都要进行编译,它不能被存储到数据库中,也不能在
其他过程化SQL块中调用。过程和函数是命名块,他们被编译后保存在数据库中,称为持久性存储模块(PSM),
可以被反复调用,运行速度较快。

  1.存储过程
    存储过程是由结构化SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器,因此称它为存储过程,
    使用时只要调用即可。

    1)由于存储过程不像解释执行的SQL语句那样在提出操作请求时才进行语法分析和优化工作,因而运行效率
    高,它提供了在服务器端快速执行SQL语句的有效途径。
    2)存储过程降低了客户机和服务器之间的通信量。客户机上的应用程序只要通过网络向服务器发出调用存储
    过程的名字和参数,就可以让关系数据库管理系统执行其中的多条SQL语句并进行数据处理,只有最终的处理结果才返回客户端。
    3)方便实施企业规则。可以把企业规则的运算程序写成存储过程放入数据库服务器中,由关系数据库管理系统管理,既有利于集中
    控制,又能够方便地进行维护。当企业规则发生变化时只要修改存储过程即可,无需修改其他应用程序。

  2.存储过程的用户接口
    1)创建存储过程
      CREATE OR REPLACE PROCEDURE 过程名([参数1,参数2,,,]) /*存储过程首部*/
      AS <过程化SQL快> /*存储过程体,描述存储过程的操作*/
      存储过程包括过程首部和过程体,在过程首部,“过程名”是数据库服务器合法的对象标识;
    参数列表[参数1,参数2,,,]用名字来标识调用时给出的参数值,必须指定值的数据类型。
    过程体是一个<过程化SQL块>,包括声明部分和可执行语句部分。
    2) 执行存储过程
      CALL/PERFROM PROCEDURE 过程名 ([参数1,参数2,,,])
    使用CALL或者PERFORM等方式激活存储过程的执行,在过程化SQL中,数据库服务器支
    持在过程体中调用其他存储过程。
    3) 修改存储过程

      ALTER PROCEDURE 过程名1 RENAME TO 过程名2; (重新命名一个存储过程)
      ALTER PROCEDURE 过程名 COMPILEL (重新编译一个存储过程)
    4) 删除存储过程
      DROP PROCEDURE 过程名()
  3.函数
    函数必须指定返回类型
    CREATE OR REPLACE FUNCTION 函数名([参数1,参数2,,,])RESEULT <类型> AS <过程化SQL块>
     1)函数的执行语句格式

      CALL/SELECT 函数名([参数1,参数2,,,])
  
       2) 重命名一个自定义函数

       ALTER FUNCTION 函数名1 RENAME TO 函数名2

      3) 重新编译一个函数

       ALTER FUNCTION 函数名 COMPILE;

三、过程化SQL中的游标
    游标的概念:游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。游标的作用就是用于临时存
  储从数据库中提取的数据块。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,
  最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。

 

posted @ 2020-02-08 19:56  乌托邦的梦想  阅读(164)  评论(0)    收藏  举报