DECLARE -- 声明变量、游标BEGIN -- 执行语句 -- [异常处理]END;/
该部分用于声明变量或游标(结果集类型变量)。 如果程序中没有变量声明,可以省略,异常处理部分也可以省略。 开始和结束“;” “/”不能省略。 在 PL/SQL 中,“;” 冒号表示每条语句的结束,“/”表示整个PL/SQL程序的结束。 了解了PL/SQL的程序结构后,我们开始编写PL/SQL的第一个hello world。
begin DBMS_OUTPUT.PUT_LINE('hello world');end;/
是一个输出对象,是上面对象的一个方法,用于输出自动换行的字符串。 或者如果“命令窗口”中没有输出,您可以使用on/off命令来更改设置。
既然PL/SQL具有编程语言的特性,那么它自然也支持变量。
PL/SQL变量可以分为两种类型,“普通变量”和“特殊变量”。 特殊变量分为引用类型和记录类型。
普通变量是数据类型,包括char、date、long。
变量声明方式: 变量名 变量类型(变量大小);例如:O_NAME VARCHAR2(255);
给PL/SQL变量赋值有两种方法:
直接赋值 「:=」冒号加等号语句赋值,使用 select ... into ... 赋值,语法 select 值 into 变量
PL/SQL 中的连接使用“||”,这与 Java 中的“+”符号相同。 下面是一个例子。 我们输出一个变量:
DECLARE O_NAME VARCHAR2(5) := 'TOM';BEGIN dbms_output.put_line('NAME:'||O_NAME);END;/输出结果 NAME:TOM
我们来看看参考变量。 顾名思义,引用变量的类型和大小是指数据库表中字段的类型和大小。
变量声明方式:变量名 表名.列名%TYPE;例如:O_NAME EXP.NAME%TYPE;
记录变量用于保存一行记录,相当于Java中的对象。
变量声明方式:变量名 表名%ROWTYPE例如:o_exp exp%rowtype
学完变量,再学过程控制。 过程控制具有条件分支和循环。 PL/SQL 具有三种类型的循环。 这里我们只学习LOOP循环。
条件分支就是我们常见的if...else...我们看一下它的格式:
BEGIN IF 条件1 THEN 执行1; ELSIF 条件2 THEN 执行2; ELSE 执行3; END IF;END;
这里需要注意的是,这是“ELSIF”,并没有错。 这不是我们编程中常见的“else if”。 如果有 IF,则必须有 END IF。 这就像Java中用于判断条件判断开始和结束的大括号一样。
PL/SQL 中有三种类型的循环:LOOP、FOR 和 WHILE。 这里我们主要研究LOOP循环。
BEGIN LOOP EXIT WHEN 退出循环条件; END LOOP;END;/
就像这里的分支控制一样,LOOP完成后一定要有END LOOP,这也相当于Java中循环开头和结尾的大括号。
接下来我们学习SQL编程中一个非常重要的知识点,“游标”。 其他数据库也支持游标。
游标:用于临时存储查询返回的多行数据,类似于Java中的容器(如果对Java中的容器不了解,可以参考我之前的文章Java容器框架进行学习整理)。 Java中的容器是用来安装Java 的,这里的游标是用来加载数据库中表的记录的。
游标的用法是:声明->打开->读取->关闭。
游标也有自己的属性:
让我们看一个使用游标的示例:
declare --定义游标 cursor o_cur is select name from exp; --定义变量 o_name exp.name%type;begin --打开游标,这时游标位于第一条记录之前 open o_cur; --循环 loop --读取游标,向下移动游标一次 fetch o_cur into o_name; --退出循环,当游标下移一次后,找不到记录时,则退出循环 exit when o_cur%notfound; --输出结果 dbms_output.put_line('name:'||o_name); end loop; --关闭游标 close o_cur;end;/
最后我们一起来了解一下“存储过程”。
存储过程是存储各个PL/SQL业务处理过程以供重用的PL/SQL方法,类似于Java中的方法。
存储过程的语法:CREATE OR REPLACE PROCEDURE 存储过程名字(参数列表) ISBEGINEND [存储过程名字];
存储过程的参数可以分为不带参数、带输入参数和带输入输出参数。
让我们看一个带有输入和输出参数的存储过程的示例:
CREATE OR REPLACE PROCEDURE findName(O_NO IN NUMBER, O_NAME OUT VARCHAR2)
AS
BEGIN
SELECT NAME INTO O_NAME FROM EXP WHERE NO = O_NO;
END;
创建存储过程并一次成功编译后,我们就可以根据存储过程名称来调用它了。 调用存储过程时,我们需要注意传入参数的顺序和定义。 调用存储过程的方式有以下三种:
我们在 PL/SQL 中调用上面创建的存储过程:
DECLARE O_NAME EXP.NAME%TYPE;BEGIN findName(11111,O_NAME ); DBMS_OUTPUT.PUT_LINE('NAME = '||O_NAME);END;/
除了存储过程之外,PL/SQL还支持函数,存储过程与函数非常相似。 但函数必须返回参数,而且不如存储过程灵活,所以这里就不介绍了。 如果你有兴趣,可以自己去了解一下。