PL/SQL语法

1.语法结构:

[DECLARE
--declaration statements] ①
BEGIN
--executable statements ②
[EXCEPTION
--exception statements] ③
END;

语法解析:
① 声明部分:声明部分包含了变量和常量的定义。这个部分由关键字 DECLARE 开始,如果不声明变量或者常量,可以省略这部分。

②执行部分:执行部分是 PL/SQL 块的指令部分,由关键字 BEGIN 开始,关键字 END结尾。所有的可执行 PL/SQL 语句都放在这一部分,该部分执行命令并操作变量。其他的 PL/SQL 块可以作为子块嵌套在该部分。PL/SQL 块的执行部分是必选的。注意 END 关键字后面用分号结尾。

③ 异常处理部分:该部分是可选的,该部分用 EXCEPTION 关键字把可执行部分分成两个小部分,之前的程序是正常运行的程序,一旦出现异常就跳转到异常部分执行。

2.语法格式:声明变量

变量名 数据类型[ :=初始值]

数据类型如果需要长度,可以用括号指明长度,比如:varchar2(20)。
--代码演示:声明变量
DECLARE
	sname VARCHAR2(20):='jerry';
BEGIN
	sname:=sname || 'and tom'; 
	dbms_output.put_line(sname); 
END;

DECLARE
  sname VARCHAR2(20) DEFAULT 'jerry'; --①
BEGIN
  SELECT ename INTO sname FROM emp WHERE empno = 7934; --②
  dbms_output.put_line(sname);
END;
代码解析:
① 变量初始化时,可以使用 DEFAULT 关键字对变量进行初始化。 
② 使用 select…into 语句对变量 sname 赋值,要求查询的结果必须是一行,不能是多行或者没有记录。

常量在声明时赋予初值,并且在运行时不允许重新赋值。使用 CONSTANT 关键字声明常
量。
pi CONSTANT number := 3.14; --圆周率长值 不可变量CONSTANT

属性数据类型

%ROWTYPE引用数据库表中的一行作为数据类型,即 RECORD 类型(记录类型),是 PL/SQL 附加的

%TYPE
%TYPE 可以引用表中的某列作的类型为变量的数据类型,也可以引用某变量的类型作为新变量的数据类型。
DECLARE
sal emp.sal%TYPE; 
mysal number(4):=3000;
totalsal mysal%TYPE; --引用mysal的类型作为totalsal的数据类型

3.条件控制

1).IF语法

IF 条件 THEN
--条件结构体
END IF;

2).IF-THEN-ELSE

语法格式:IF-THEN-ELSE
IF 条件 THEN
--条件成立结构体
ELSE
--条件不成立结构体
END IF;

3).CASE

CASE 是一种选择结构的控制语句,可以根据条件从多个执行分支中选择相应的执行动
作。也可以作为表达式使用,返回一个值。类似于 C#中的 switch 语句。语法是:
--不返回值
CASE [selector]
    WHEN 表达式 1 THEN 语句序列 1;
    WHEN 表达式 2 THEN 语句序列 2;
    WHEN 表达式 3 THEN 语句序列 3;
……
    [ELSE 语句序列 N];
END CASE;

--返回一个值
num:=
  CASE [selector]
      WHEN 表达式 1 THEN 值 1
      WHEN 表达式 2 THEN 值 2   	--没有分号
      WHEN 表达式 3 THEN 值 3
……
     [ELSE 值 N];
END ;		--没有case

4.循环结构

1).LOOP-END LOOP循环

语法格式:
LOOP
--循环体
END LOOP;

语法格式:
1. 循环体在 LOOP 和 END LOOP 之间,在每个 LOOP 循环体中,首先执行循环体中的语
句序列,执行完后再重新开始执行。
2. 在 LOOP 循环中可以使用 EXIT 或者[EXIT WHEN 条件]的形式终止循环。否则该循环
就是死循环。

2).while循环

先判断条件,条件成立再执行循环体。
语法格式:
WHILE 条件 LOOP
--循环体
END LOOP;

3).for循环

语法格式:
FOR 循环变量 IN [REVERSE] 循环下限..循环上限 LOOP
--循环体
END LOOP;
语法解析:
循环变量:该变量的值每次循环根据上下限的 REVERSE 关键字进行加 1 或者减 1。
REVERSE:指明循环从上限向下限依次循环。

5.顺序结构

GOTO语句,NULL语句

GOTO 语句将无条件的跳转到标签指定的语句去执行。标签是用双尖括号括起来的标示
符,在 PL/SQL 块中必须具有唯一的名称,标签后必须紧跟可执行语句或者 PL/SQL 块。
GOTO 不能跳转到 IF 语句、CASE 语句、LOOP 语句、或者子块中。

NULL 语句什么都不做,只是将控制权转到下一行语句。NULL 语句是可执行语句。NULL
语句在 IF 或者其他语句语法要求至少需要一条可执行语句,但又不需要具体操作的地
方。比如 GOTO 的目标地方不需要执行任何语句时。
DECLARE
  num int:='&input';
BEGIN
  IF num > 100 THEN
    GOTO first_label; --① 
  ELSE
    GOTO second_label; -- ②
  END IF;
  <<first_label>>--③
  dbms_output.put_line('firstlabel');
  <<second_label>> --④
  NULL;
END;
代码解析:
① 跳转到程序 first_label 位置,就是②的位置,first_label 是一个标签,用两个尖括号包含。
② 无条件跳转到 sedond_label 位置,就是④的位置。④处不执行任何内容,因此是一个 NULL 语句
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值