PLSQL基础

                         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.1oopexit语句

 ----- 输出110

 

 

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;

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值