1、什么是pl/sql编程
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。
PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,通过逻辑判断、循环等操作实现复杂的功能或者计算。
PL/SQL 只有 Oracle 数据库有。
2、plsql的基本结构
pl/sql 程序与块(block)为基本单元,整个PL/SQL块分为三个部分:声明部分,执行部分,异常处理部分
模板示例如下:
declare
声明区,声明变量函数,游标等
begin
执行区
exception
异常处理区
end
DBMS_OUTPUT.PUT_LINE(V_comment); --相当于system.out.println
3、变量的声明
1)标识符规范
- 不能超过30个字符
- 不区分大小写
- 不能使用减号(-)
- 不能使用SQL保留字
- 变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果
2)变量类型
oraclePLSQL常用数据类型.png
%TYPE:与已知的数据类型一致
运算符
plsql运算符.png
3)声明变量
declare
rowid ROWID;
name varchar2(10);
-- 声明dept变量,类型为dept表中deptName的数据类型一致
dept dept.deptName%TYPE
3)变量赋值
语法:
变量 := 值
例:
declare
price number :=10;
4、流程控制
1)if elsif
语法:
IF <布尔表达式> THEN
PL/SQL 和 SQL语句
ELSIF < 其它布尔表达式> THEN
其它语句
ELSIF < 其它布尔表达式> THEN
其它语句
ELSE
其它语句
END IF;
示例:
DECLARE
V_salary NUMBER :=&empno;
V_comment VARCHAR2(35);
BEGIN
IF v_salary<2500 THEN
V_comment:= '吃土啊';
ELSIF v_salary <5000 THEN
V_comment:= '凑合过日子吧';
ELSE
V_comment:= '浪一波?';
END IF;
DBMS_OUTPUT.PUT_LINE(V_comment);
END;
2)CASE 表达式
类似于java中的switch
语法:
CASE selector
WHEN expression1 THEN result1
WHEN expression2 THEN result2
WHEN expressionN THEN resultN
[ ELSE resultN+1]
END;
示例:
DECLARE
v_point NUMBER :=&point;
v_comment char(1);
BEGIN
v_comment:=
case
when v_point>90 then 'A'
when v_point>70 then 'B'
when v_point>60 then 'C'
else 'D'
END;
DBMS_OUTPUT.PUT_LINE(v_comment);
END;
DECLARE
V_grade char(1) := UPPER('&p_grade');
V_appraisal VARCHAR2(20);
BEGIN
V_appraisal :=
CASE v_grade
WHEN 'A' THEN 'Excellent'
WHEN 'B' THEN 'Very Good'
WHEN 'C' THEN 'Good'
ELSE 'No such grade'
END;
DBMS_OUTPUT.PUT_LINE('Grade:'||v_grade||' Appraisal: '|| v_appraisal);
END;
3)LOOP 循环
与java中的do while 类似
语法:
LOOP
要执行的语句;
EXIT WHEN <条件语句> /*条件满足,退出循环语句*/
END LOOP;
示例:
DECLARE
int NUMBER(2) :=0;
BEGIN
LOOP
int := int + 1;
DBMS_OUTPUT.PUT_LINE('int:'||int);
EXIT WHEN int =10;
END LOOP;
END;
4)while 循环
与java中的while循环类似
语法:
WHILE <布尔表达式> LOOP
要执行的语句;
END LOOP;
示例:
DECLARE
int NUMBER(2) :=0;
BEGIN
while int<10
LOOP
int := int + 1;
DBMS_OUTPUT.PUT_LINE('int:'||int);
END LOOP;
END;
5)for循环
语法:
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP
要执行的语句;
END LOOP;
每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT 退出循环。
示例:
BEGIN
FOR int in reverse 1..10 LOOP
DBMS_OUTPUT.PUT_LINE('int : '||int);
if int=5 then exit;
end if;
END LOOP;
END;
6)goto
无条件跳转到指定的标号
语法:
GOTO 标号;
任意代码...
<<标号>> /*标号是用<< >>括起来 */