PL/SQL基础
1. PL/SQL块结构
1.1PL/SQL程序块的主要特点如下:
→具有模块化的结构。
→使用过程化语言控制结构。
一个PL/SQL程序块包括三个部分:声明部分,执行部分,异常处理部分。
1.2语法结构:
declare
<declarations section>
begin
<executable command>
exception
<exception handing>
end;
2. 定义变量和&字符的应用
2.1定义变量:
变量名都必须以字母开头,不能有空格,不能超过30个字符长度,同时不能和保留字同名。变量名不区分大小写,在字母后面可以带数字或特殊字符。关键字constant定义常量,“:=”表示赋值符号;default定义默认值;not null为可选参数,若选用,表明该变量不能为空值。
2.2字符&的应用
3.%type和%rowtype举例
3.1%type例子
3.2%rowtype例子
4.动态SQL
Oracle中提供了execute immediate语句来执行动态SQL,它的语法形式如下:
execute immediate 动态SQL语句using绑定参数列表returning into 输出参数列表
5.条件语句
5.1 if-then-elsif语句:
------------------------------------
declare
v_empno emp.empno %type:=7566;
v_job emp.job%type;
begin
select job into v_job from emp where empno=v_empno;
if v_job='CLERK' then
dbms_output.put_line('job is'||v_job);
elsif v_job='SALESMAN' then
dbms_output.put_line('job is'||v_job);
else
dbms_output.put_line('I know!');
end if;
end;
5.2 case 语句:
----------------------------------------
declare
v_empno emp.empno %type:=7566;
v_job emp.job%type;
begin
select job into v_job from emp where empno=v_empno;
case v_job
when ‘CLERK’ then
dbms_output.put_line('CLERK OK!’);
when 'SALESMAN' then
dbms_output.put_line('SALESMAN Ok!');
else
dbms_output.put_line('I know!');
end case;
end;
6.循环语句
6.1oop和exit语句
----- 输出1到10
6.2for-loop语句
6.3while-loop语句
7.错误处理
7.1异常有两种类型:
(1)预定义异常 - 当 PL/SQL 程序违反 Oracle 规则或超越系统限制时隐式引发
举例说明:
DECLARE
ordernum VARCHAR2(5);
BEGIN
SELECT orderno INTO ordernum FROM order_master;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.PUT_LINE ('返回多行');
END;
(2)用户定义异常 - 用户可以在 PL/SQL 块的声明部分定义异常,自定义的异常通过 RAISE 语句显式引发
举例说明:
DECLARE
invalidCATEGORY EXCEPTION;
category VARCHAR2(10);
BEGIN
category := '&Category';
IF category NOT IN ('附件','顶盖','备件') THEN
RAISE invalidCATEGORY;
ELSE
DBMS_OUTPUT.PUT_LINE('您输入的类别是'|| category);
END IF;
EXCEPTION
WHEN invalidCATEGORY THEN
DBMS_OUTPUT.PUT_LINE('无法识别该类别');
END;
8.顺序控制
8.1制用于按顺序执行语句
8.2顺序控制语句包括:
(1)GOTO 语句 - 无条件地转到标签指定的语句
(2)NULL 语句 - 什么也不做的空语句
8.3例子:
DECLARE
qtyhand itemfile.qty_hand%type;
relevel itemfile.re_level%type;
BEGIN
SELECT qty_hand,re_level INTO qtyhand,relevel
FROM itemfile WHERE itemcode = 'i201';
IF qtyhand < relevel THEN
GOTO updation;
ELSE
GOTO quit;
END IF;
<<updation>>
UPDATE itemfile SET qty_hand = qty_hand + re_level
WHERE itemcode = 'i201';
<<quit>>
NULL;
END;
2902

被折叠的 条评论
为什么被折叠?



