PL/SQL的基本单位,区段。组成:声明部分、可运行部分、排除-构建 部分。
PL/SQL的特点:时块结构语言。主要包括:存储过程、函数、匿名三部分。
在运行PL/SQL时,不是逐条执行的,而是作为一组SQL语句整体执行。
PL/SQL程序:有定义部分(DECLARE)、执行部分(BEGIN END)和异常部分(EXCEPTION)组成。
定义部分:用于定义常量、变量、游标、异常、复合数据类型,一般在程序中使用的变量都要在这里声明。
执行部分:用于实现应用模块的功能。该部分包含了要执行的SQL语句块。
异常部分:用于处理在执行SQL过程中产生的异常。
示例:
DECLARE
BEGIN
EXCEPTION
END;
常用数据类型:
变量:
在声明部分声明:
语法:
variable_name datatype not null [default_value:=value]
常量声明如下:
variable_name CONSTANT datatype not null [default_value:=value]
运算符:
条件控制语句:
IF conditons THEN statement1
ELSIF conditions THEN statement2
ELSE condition THEN statement3
小示例:
DECLARE
mynumber NUMBER(3) := 100;
BEGIN
IF mynumber = 100
THEN
mynumber := mynumber + 15;
dbms_output.put_line('输出结果为:' || mynumber);
ELSIF mynumber = 115
THEN
dbms_output.put_line('输出结果为:' || mynumber);
END IF;
END;
-----------------------------------------------------------------------
输出结果为:115
case when then 条件控制语句:
--case when then 的第1种用法 DECLARE mynumber NUMBER(3) := 200; BEGIN CASE mynumber WHEN 100 THEN mynumber := mynumber + 15; dbms_output.put_line('输出结果为:' || mynumber); WHEN 115 THEN dbms_output.put_line('输出结果为:' || mynumber); ELSE dbms_output.put_line('输出结果为:无符合条件结果' ); END CASE; END; ---------------------------------------------------------------------------
输出结果为:无符合条件结果
--case when then 的第2种用法 DECLARE mynumber NUMBER(3) := 200; BEGIN CASE WHEN mynumber= 100 THEN mynumber := mynumber + 15; dbms_output.put_line('输出结果为:' || mynumber); WHEN mynumber= 115 THEN dbms_output.put_line('输出结果为:' || mynumber); ELSE dbms_output.put_line('输出结果为:无符合条件结果' ); END CASE; END; ---------------------------------------------------------------- 输出结果为:无符合条件结果
LOOP 循环语句:
WHILE循环:DECLARE mynumber NUMBER(3) := 200; BEGIN LOOP EXIT WHEN mynumber >900 ; mynumber := mynumber + 50; dbms_output.put_line(mynumber); END LOOP; END; --------------------------------------------- 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950
DECLARE mynumber NUMBER(3) := 200; BEGIN WHILE mynumber <900 LOOP mynumber := mynumber + 50; dbms_output.put_line(mynumber); END LOOP; END; --------------------------------------------- 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950
FOR 循环:
DECLARE mynumber NUMBER(18,8); secOND_number NUMBER(18,8):=1.5; str CONSTANT VARCHAR2(100) := '输出结果:'; BEGIN FOR mynumber IN 1..10 LOOP secOND_number := secOND_number*mynumber; dbms_output.put_line(str || secOND_number); END LOOP; END; --------------------------------------------- 输出结果:1.5 输出结果:3 输出结果:9 输出结果:36 输出结果:180 输出结果:1080 输出结果:7560 输出结果:60480 输出结果:544320 输出结果:5443200