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