oracle循环语句

DECLARE    --声明部分

    v_sal NUMBER(5) NOTNULL :=0;--赋初值为0,若写not null必须附一个值,声明常量是要用const

    --多行的时候要用fetchinto游标来赋值

 

--执行部分

BEGIN

  --查询工号7369的工资,并将该工资保存到变量v_sal

  --使用select..into..给变量赋值

  SELECT sal

  INTO v_sal

  FROM emp

  WHERE empno = 1000;

 

  --输出v_sal的值

  dbms_output.put_line('工资是:' || v_sal);

 

  --判断,如果工资小于2000,则给该员工加上500

  IF v_sal < 2000THEN

    UPDATE emp

    SET sal = sal + 500

    WHERE empno = 7369;

   

    dbms_output.put_line('更新成功');

  ENDIF;

 --异常处理

EXCEPTION

  --当没有查找到指定工号的数据时,发生该异常

  WHEN no_data_found THEN dbms_output.put_line('没有查询到相关数据');

  --others捕获其他不明确的异常

  WHENOTHERSTHEN

    dbms_output.put_line('发生了其他异常');

END;

 

SELECT * FROM emp WHERE empno = 7369;

 

----------------------------------------------------------------------------

DECLARE

--指定员工的姓名,

    v_ename emp.ename%TYPE;--VARCHAR2(20)   ,%TYPE表示v_ename的数据类型和表emp中的ename字段的数据类型一致

    v_sal emp.sal%TYPE;

    v_empno emp.empno%TYPE:=&empno;--&表示从键盘上输入

   

BEGIN

  SELECT ename,sal

  INTO v_ename,v_sal

  FROM emp

  WHERE empno = v_empno;

 

  --输出员工姓名和工资

  dbms_output.put_line('员工姓名:' || v_ename || ',员工工资:' || v_sal);

 EXCEPTION

   WHEN no_data_found THEN

     dbms_output.put_line('你输入的员工工号不存在!');

END;

 

----------------------------------------------------------------------------

--属性类型:%ROWTYPE

DECLARE

  v_emp emp%ROWTYPE;--%ROWTYPE表示变量v_emp表和emp表一行的数据类型是一致的

  v_empno emp.empno%TYPE:=&empno;

 

BEGIN

  --查询指定工号的员工所有信息,保存在记录类型v_emp

  SELECT *

  INTO v_emp--所有的变量都保存在v_emp

  FROM emp

  WHERE empno = v_empno;

 

  --输出指定员工的信息

  dbms_output.put_line('员工工号:' || v_emp.empno ||

                        ',员工姓名:' || v_emp.ename ||

                        ',员工工资:' || v_emp.job ||

                        ',工作岗位:' || v_emp.sal);

EXCEPTION

  WHEN no_data_found THEN

    dbms_output.put_line('你输入的工号不存在!');

END;

 

-----------------------------------------------------------------------------

--记录类型

DECLARE

    --自定义记录类型(也是数据类型的一种)

    TYPE emp_rec ISRECORD(

       v_ename emp.ename%TYPE,

       v_sal emp.sal%TYPE,

       v_deptno emp.deptno%TYPE

    );

   

    --定义一个emp_rec类型的变量

    v_emp emp_rec;

   

    v_empno emp.empno%TYPE:=&empno;

   

BEGIN

  SELECT ename,sal,deptno

  INTO v_emp

  FROM emp

  WHERE empno = v_empno;

 

  --输出指定员工的信息

  dbms_output.put_line('员工姓名:' || v_emp.v_ename ||

                        ',员工工资:' || v_emp.v_sal ||

                        ',部门编号:' || v_emp.v_deptno);

EXCEPTION

  WHEN no_data_found THEN

    dbms_output.put_line('你输入的工号不存在!');

END;                      

 

-----------------------------------------------------------------------------------

DECLARE

    v_ename emp.ename%TYPE;

    v_sal emp.sal%TYPE;

    v_deptno emp.deptno%TYPE:=&deptno;

   

BEGIN

  SELECT ename,sal

  INTO v_ename,v_sal

  FROM emp

  WHERE deptno = v_deptno;

 

  dbms_output.put_line('员工姓名:' || v_emp.v_ename ||

                        ',员工工资:' || v_emp.v_sal ||

                        ',部门编号:' || v_emp.v_deptno);

EXCEPTION

  WHEN no_data_found THEN

    dbms_output.put_line('你输入的部门编号不存在!');

    WHEN too_many_rows THEN

    dbms_output.put_line('查询返回多行记录!');

    WHENOTHERSTHEN

    dbms_output.put_line('发生其他异常!');

END

 

----------------------------------------------------------------------   

--loop-exit-end

DECLARE

  v_num NUMBER:=0;

BEGIN

  LOOP

    v_num:=v_num+1;

    EXITWHEN (v_num =10);--表示退出条件

  ENDLOOP;

  dbms_output.put_line('v_num:' || v_num);

END;

 

--------------------------------------------------------------------------

--while-loop-end

DECLARE

  v_num NUMBER:=0;

 

BEGIN

  WHILE v_num<10LOOP

    v_num := v_num + 1;

  ENDLOOP;

  dbms_output.put_line('v_num:' || v_num);

END;

 

-----------------------------------------------------------------------

--for-in-loop-end

DECLARE

  v_num NUMBER:=0;

  i NUMBER;

 

BEGIN

  FOR i IN1..10 LOOP   --in后加reverse i--操作

    dbms_output.put_line('i=' || i);

    v_num := v_num + 1;

  ENDLOOP;

  dbms_output.put_line('v_num:' || v_num);

END;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值