数据库学习日记x

    xiaoxiao2021-03-25  86

    存储过程--Stored  Procedural

    我们通常使用PL/SQL语言来建立存储过程,

    其中PL/SQL集合了

    P1.SQL的数据操作能力

    P2.过程化语言的流程控制能力

    ————————————————————————定义————————————————————————

    PL/SQL的基本结构是块,每个块可以互相嵌套,每个块可以完成一个逻辑操作。

    1.PL/SQL定义变量的语法形式:

    变量名  数据结构  [ [NOT NULL]  : = 初值表达式 ] or

    变量名  数据结构  [ [NOT NULL] 初值表达式 ]

    2.常量定义的语法形式

    常量名  数据结构  CONSTANT : = 常量表达式

    常量必须赋值,并且不能改变,如果试图修改则会返回异常。

    3.赋值语句

    变量名称 : 表达式

    4.PL/SQL块的基本结构

    定义部分  DECLARE                                定义的变量常量等只能在该基本块中使用

                     ————变量常量游标异常等 当基本块执行结束,则定义不再存在

    执行部分  BEGIN

    ----------SQL语句 PL/SQL的流程控制语句

                           EXCEPTION                                       遇到不能继续执行的情况称为异常

    ----------异常处理部分                    遇到异常时,需要采取措施来纠正错误或者报告错误

    END

    ————————————————————————控制结构————————————————————————

    5.条件控制语句

    一般有三种形式的条件控制语句 IF-THEN,IF-THEN-ELSE和嵌套的IF语句

    (1)IF condition THEN

    sequence_of_statements

    ENDIF

    (2)IF condition THEN

             sequence_of_statements1

    ELSE

    sequence_of_statements2

    END IF

    (3)IF condition THEN

    IF ~

    END IF

    6.循环控制语句

    三种:LOOP ,WHILE-LOOP 和 FOR-LOOP

    (1)LOOP:

    LOOP

    sequence_of_statements

    END LOOP

    多数数据库服务器的PL/SQL提供EXIT,BREAK,LEAVE来结束循环

    (2)WHILE_LOOP

    WHILE condition LOOP

    Sequence_of_statements

    END LOOP

    (3)FOR-LOOP

    FOR count IN [ REVERSE ] bound1 ... bound2 LOOP

    Sequence_of_statements

    END LOOP

    FOR循环的执行过程:将count设置为循环的下界bound1,检查它是否小于上界bound2.当指定REVERSE时将count设置为循环的上界bound2,检查count是否大于下界bound1,增减步长为1

    ————————————————————————存储过程————————————————————————

    PL/SQL块主要有2个类型,命名块和匿名块。

    匿名块每次执行都要编译,不能被存储于数据库中,也不能被其他PL/SQL块调用。

    命名块包含存储过程和函数,被编译后保存于数据库中,可以被反复调用

    存储过程是指:由PL/SQL语句书写的过程(与对象对应)

    优点:存储过程运行效率高,不像解释执行的SQL语句在提出请求时才进行语法分析和优化工作。

      存储过程降低了客户机与服务器之间的通信量。

      存储过程方便实施企业规划。需要修改时只要修改存储过程,无需修改其他应用程序。

     ——————————————————————用户创建存储过程————————————————————————

    1.创建存储过程

    CREATE Procedure 过程名 ( [ 参数1,参数2,...])//存储过程首部

    AS

    < PL/SQL 块>; //存储过程体,描述该存储过程的操作

    过程名:数据库服务器合法的对象标识

    参数列表:用名字来表示调用时给出的参数值,必须制定值得数据类型。存储结构的参数也可定义输入参数、输出参数或输入/输出参数。默认输入

    过程体:一个< PL/SQL 块>。包括声明部分和可执行语句部分。

    示例:从一个账户转指定数额的款项到另一个账户中

    CREATE PROCEDURE TRANSFER(inAccount INT,outAccount INT, amount FLOAT) AS DECLEAR totalDeposit FLOAT; //变量 BEGIN /*检查转出账户的余额*/ SELECT total INTO totalDeposit FROM ACCOUNT WHERE ACCOUNTNUM = outAccount /*SELECT INTO 语句从一个表中选取数据,然后把数据插入另一个表中 SELECT INTO 语句常用于创建表的备份复件或者用于对记录进行存档。*/ IF totalDeposit IS NULL THEN /*账户不存在或账户中没有存款*/ ROLLBACK; RETURN; END IF; IF totalDeposit < amount THEN/*账户存款不足*/ ROLLBACK; RETURN; END IF; UPDATE account SET total = total - amount WHERE ACCOUNTNUM = outAccount;/*修改转出账户,减去转出额*/ UPDATE account SET total = total + amount WHERE ACCOUNTNUM = inAccount;/*修改转入账户,增加转入额*/ COMMIT; END; 重命名存储过程 ALTER Procedure 过程名 1 RENAME TO 过程2; 执行存储过程 CALL/PERFORM Procedure 过程名 ([参数1,参数2,...]); 示例: CALL Procedure TRANSFER(01003815868,01003813828,10000) 删除存储过程 DROP Procedure 过程名();

    转载请注明原文地址: https://ju.6miu.com/read-35736.html

    最新回复(0)