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创建语法见下篇博客。

 

原文地址:https://www.cnblogs.com/tongying/p/13186551.html