PL /SQ查询语句

本文详细介绍了PL/SQL中的控制结构,包括条件语句、CASE表达式、循环语句及游标操作等内容。通过实例展示了如何使用这些结构来实现复杂的业务逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 0hi猿团提供了移动跨平台开发视频,包括html5,apicloud appcan,dcloud,具体请看http://www.9y.cm 

1  条件语句

IF <布尔表达式> THEN

PL/SQL SQL语句

END IF;

 

IF <布尔表达式> THEN

PL/SQL SQL语句

ELSE

其它语句

END IF;

 

IF <布尔表达式> THEN

PL/SQL SQL语句

ELSIF <其它布尔表达式> THEN

其它语句

ELSIF <其它布尔表达式> THEN

其它语句

ELSE

其它语句

END IF;

 

提示: ELSIF 不能写成 ELSEIF

 

例1:

DECLARE

   v_empno emp.empno%TYPE;

   V_salary emp.sal%TYPE;

   V_comment VARCHAR2(35);

BEGIN

  SELECT sal INTO v_salary FROM emp WHERE empno=v_empno;

  IF v_salary<1500 THEN

      V_comment:= ‘Fairly less’;

  ELSIF v_salary <3000 THEN

     V_comment:= ‘A little more’;

  ELSE

     V_comment:= ‘Lots of salary’;

  END IF;

  DBMS_OUTPUT.PUT_LINE(V_comment);

END;

 

§3.2  CASE 表达式

CASE selector

      WHEN expression1 THEN result1

      WHEN expression2 THEN result2

 

      WHEN expressionN THEN resultN

      [ ELSE resultN+1]

END;

 

例2:

 

DECLARE

      V_grade char(1) ;

      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;

 

 

循环

 1. 简单循环

LOOP

     要执行的语句;

     EXIT WHEN <条件语句>      /*条件满足,退出循环语句*/

END LOOP;

 

例 3.

DECLARE

   int NUMBER(2) :=0;

BEGIN

  LOOP

     int := int + 1;

     DBMS_OUTPUT.PUT_LINE('int 的当前值为:'||int);

     EXIT WHEN int =10;

  END LOOP;

END;

 

2. WHILE 循环

 

WHILE <布尔表达式> LOOP

   要执行的语句;

END LOOP;

 

 

DECLARE

x NUMBER :=1;

BEGIN

  WHILE x<=10 LOOP

     DBMS_OUTPUT.PUT_LINE('X的当前值为:'||x);

      x:= x+1;

  END LOOP;

END;

 

3. 数字式循环

 

FOR循环计数器 IN [ REVERSE ]下限 ..上限 LOOP

 要执行的语句;

END LOOP;

每循环一次,循环变量自动加1;使用关键字REVERSE,循环变量自动减1。跟在IN REVERSE 后面的数字必须是从小到大的顺序,而且必须是整数,不能是变量或表达式。可以使用EXIT退出循环。

 

例5.

BEGIN

  FOR int  in 1..10 LOOP

      DBMS_OUTPUT.PUT_LINE('int 的当前值为: '||int);

  END LOOP;

END;

 

例 6.

CREATE TABLE temp_table(num_col NUMBER);

 

DECLARE

V_counter NUMBER := 10;

BEGIN

  INSERT INTO temp_table(num_col) VALUES (v_counter );

  FOR v_counter IN 20 .. 25 LOOP

     INSERT INTO temp_table (num_col ) VALUES ( v_counter );

  END LOOP;

  INSERT INTO temp_table(num_col) VALUES (v_counter );

  FOR v_counter IN REVERSE 20 .. 25 LOOP

     INSERT INTO temp_table (num_col ) VALUES ( v_counter );

  END LOOP;

END ;

 

DROP TABLE temp_table;

 

 

标号和GOTO

PL/SQLGOTO语句是无条件跳转到指定的标号去的意思。语法如下:

 

GOTO  label;

 . . .  . . .

<<label>> /*标号是用<< >>括起来的标识符 */

 

例7:

DECLARE

  V_counter NUMBER := 1;

BEGIN

  LOOP

    DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);

 V_counter := v_counter + 1;

 IF v_counter > 10 THEN

    GOTO l_ENDofLOOP;

 END IF;

  END LOOP;

 <<l_ENDofLOOP>>

    DBMS_OUTPUT.PUT_LINE('V_counter的当前值为:'||V_counter);

END ;

    语句

PL/SQL程序中,可以用 null语句来说明不用做任何事情的意思,相当于一个占位符,可以使某些语句变得有意义,提高程序的可读性。如:

DECLARE

. . .

BEGIN

IF v_num IS NULL THEN

GOTO print1;

END IF;

<<print1>>

NULL; -- 不需要处理任何数据。

END;

 

 

 游标概念

 为了处理 SQL语句,ORACLE必须分配一片叫上下文( context area )的区域来处理所必需的信息,其中包括要处理的行的数目,一个指向语句被分析以后的表示形式的指针以及查询的活动集(active set)

  游标是一个指向上下文的句柄( handle)或指针。通过游标,PL/SQL可以控制上下文区和处理语句时上下文区会发生些什么事情。

      对于不同的SQL语句,游标的使用情况不同:

SQL语句

游标

非查询语句

隐式的

结果是单行的查询语句

隐式的或显示的

结果是多行的查询语句

显示的

 

§4.1.1处理显式游标

 

1.  显式游标处理

显式游标处理需四个 PL/SQL步骤:

l        定义游标:就是定义一个游标名,以及与其相对应的SELECT语句。

格式:

CURSOR cursor_name[(parameter[, parameter]…)] IS select_statement;

      游标参数只能为输入参数,其格式为:

             parameter_name [IN] datatype [{:= | DEFAULT} expression]

      在指定数据类型时,不能使用长度约束。如NUMBER(4)CHAR(10)等都是错误的。

l        打开游标:就是执行游标所对应的SELECT语句,将其查询结果放入工作区,并且指针指向工作区的首部,标识游标结果集合。如果游标查询语句中带有FOR UPDATE选项,OPEN语句还将锁定数据库表中游标结果集合对应的数据行。

格式:

OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)];

在向游标传递参数时,可以使用与函数参数相同的传值方法,即位置表示法和名称表示    法。PL/SQL 程序不能用OPEN 语句重复打开一个游标。

l        提取游标数据:就是检索结果集合中的数据行,放入指定的输出变量中。

格式:

FETCH cursor_name INTO {variable_list | record_variable };

l        对该记录进行处理;

l        继续处理,直到活动集合中没有记录;

l        关闭游标:当提取和处理完游标结果集合数据后,应及时关闭游标,以释放该游标所占用的系统资源,并使该游标的工作区变成无效,不能再使用FETCH语句取其中数据。关闭后的游标可以使用OPEN语句重新打开。

格式:

CLOSE cursor_name;

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhchzh1000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值