• SQL教程_SQL语法、过程和函数概述


    1 SQL语法

     省略

    2 SQL过程 

    2.1 SQL过程的功能:实现控制流逻辑

    2.2 SQL过程的结构

    一个存储过程:

    CREATE OR REPLACE PROCEDURE PROC1
    (
         P_PARA1 VARCHAR2,
         P_PARA2 VARCHAR2,
         P_PARA3 IN OUT VARCHAR2
    )
     AS
        V_NAME VARCHAR2(20);
    BEGIN
         V_NAME := 'zhangsan';
         P_PARA3 := V_NAME;
         DBMS_OUTPUT.PUT_LINE('p_para3:'||P_PARA3);
    EXCEPTION
         ...
    END PROC1;

    一个最简单的存储过程,大体分为:

    • 创建语句:create or replace procedure 存储过程名,如果系统中没有此存储过程就新建一个,如果已存在就把原来的删掉,重新创建一个存储过程。如果没有or replace语句,则仅仅是新建一个存储过程,如果系统已经存在该存储过程,则会报错。
    • 参数列表: p_para1 varchar2,
                         p_para2 varchar2,
                         p_para3 in out varchar2
      参数列表包括参数名和参数类型,参数名不能重复。过程可以有参数,也可以没有参数。
      参数传递方式:IN,OUT,IN OUT。IN表示输入参数,按值传递方式;OUT表示输出参数,可以作为存储过程的输出结果,供外部调用者使用。需要注意,当一个参数被指定为OUT类型时,就算在调用存储过程之前对该参数进行了赋值,在存储过程中该参数的值仍然是null;IN OUT既可作输入参数,又可作输出参数。如果存储过程的参数没有指定参数传递类型,默认为IN。参数列表里只需指明数据类型既可,不需要指定宽度,参数的宽度由外部调用者指定。

    • 变量声明块:紧跟着的AS(IS)关键字,可以理解为pl/sql的declare关键字,用于声明变量。变量声明块用于声明该存储过程中需要用到的变量,它的作用域为该存储过程。另外这里声明的变量必须指定宽度,且 遵循PL/SQL的变量声明规范。        
    • 过程语句块:从begin关键字开始为过程的语句块,存储过程的具体逻辑在这里来实现。
    • 异常处理块:关键字为exception,为处理语句产生的异常,该部分可选。
    • 结束块:由end关键字结束。 

    2.3 SQL过程中的控制流语句

    2.3.1 条件语句

    • CASE语句

    CASE

          WHEN (CONDITION) THEN (STATEMENT)

          WHEN (CONDITION) THEN (STATEMENT)

          ELSE (STATEMENT)

    END; 

    • IF语句

    IF (CONDITION) THEN

        (STATEMENT)

    ELSE IF (CONDITION) THEN 

         (STATEMENT)

    ELSE (STATEMENT)

    END IF;

    2.3.2 循环语句

    • FOR语句
    • LOOP语句
    • WHILE语句
    • REPEAT语句
    • 游标

    FOR (CONDITION) LOOP
    (STATEMENT)
    END LOOP;

    WHILE (CONDITION) LOOP
    (STATEMENT)
    END LOOP;


    2.3.3 控制转移语句

    • GOTO语句
    • ITERATE语句
    • LEAVE语句
    • RETURN语句 

    CREATE OR REPLACE FUNCTION PROC1
    (
         参数列表
    ) RETURN VARCHAR2  --返回参数类型
     AS
        变量声明
    BEGIN
         过程语句
         RERURN 可以是声明的变量也可以是任意数据
    END PROC1;
     

    3 SQL函数

    3.1 SQL函数的功能:实现控制流逻辑

    3.2 系统自带函数

    3.3 UDF函数

    除了系统提供的函数外,用户还可以根据需要自定义函数(User Defined Functions)。用户自定义函数不能用于执行一系列改变数据库状态的操作,但可以像系统函数一样在查询或存储过程等的程序段中使用,也可以像存储过程一样通过EXECUTE命令来执行。

    在SQL Server中根据函数返回值形式的不同,将UDF分为三种类型:标量型函数(scalar fuctions)、内联表值型函数(Inline Table_valued Functions)和多声明表值型函数(Multi-statement table-valued functions)。

    3.3.1 标量型函数(Scalar fuctions)

    标量型函数返回一个确定类型的标量值,其返回值类型为除TEXT, NTEXT, IMAGE, CURSOR, TIMESTAMP 和 TABLE类型外的其他数据类型。函数体语句定义在BEGIN-END语句内,其中包含了可以返回值的Transact-SQL命令。

    3.3.2 内联表值型函数(Inline Table_valued Functions)

    内联表值型函数以表的形式返回一个返回值,即它返回的是一个表内联表值型函数,没有由BEGIN-END语句括起来的函数体。其返回的表由一个位于RETURN子句中的SELECT命令段从数据库中筛选出来。内联表值型函数功能相当于一个参数化的视图。

    3.3.3 多声明表值型函数(Multi-statement table-valued functions)

     多声明表值型函数可以看作标量型和内联表值型函数的结合体。它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END语句括起来的函数体,返回值的表中的数据是由函数体中的语句插入的。由此可见,它可以进行多次查询,对数据进行多次筛选与合并,弥补了内联表值型函数的不足。

    这三种类型到UDF创建语法见下篇博客。

     

  • 相关阅读:
    Linux 头文件详解
    Linux 进程运行状态
    配置uboot指定nfs挂载根文件系统
    (实例)Linux 内核添加exfat驱动
    Linux 内核 编译模块
    简单添加自己的驱动程序到Linux内核树中
    Linux 生成随机mac地址,并固化到本地
    (转)为什么ssh一关闭,程序就不再运行了?
    Ubuntu 安装 QtCreator (version : Qt 5.9.8)
    Ubuntu 固定自己的IP
  • 原文地址:https://www.cnblogs.com/tongying/p/13186551.html
Copyright © 2020-2023  润新知