• oracle--循环PL/SQL--demo1---


    --简单的条件判断if–then
    --编写一个过程,可以输入一个雇员名,如果该雇员的工资低于2000,就给该员工工资增加10%。
    create or replace procedure sp_pro6
    (
    spname varchar2
    )is 
    --定义
    v_sal emp.sal%type;
    begin
    --执行
    select sal into v_sal from emp where ename=spname;
    --判断
    if v_sal<2000 then
    update emp set sal=sal+sal*0.1 where ename=spname;
    end if;
    commit;
    end;
    --调用存储过程
    exec SP_PRO6('ALLEN');
    ========================================================
    --二重条件分支 if–then–else
    --编写一个过程,可以输入一个雇员名,如果该雇员的补助不是0就在原来的基础上增加100;如果补助为0就把补助设为200;
    create or replace procedure sp_pro6
    (
    spname varchar2
    )is
    v_comm emp.comm%type;
    begin
    select comm into v_comm from emp where ename=spname;
    if v_comm<>0 then
    update emp set comm=comm+100 where ename=spname;
    else
    update emp set comm=comm+200 where ename=spname;
    end if;
    commit;
    end;
    ======================================================
    --多重条件分支 if–then–ELSIF–then
    --编写一个过程,可以输入一个雇员编号,如果该雇员的职位是PRESIDENT就给他的工资增加1000,如果该雇员的职位是MANAGER 就给他的工资增加500,其它职位的雇员工资增加200
    CREATE OR REPLACE PROCEDURE SP_PRO6(SPNO NUMBER) IS
      --定义
      V_JOB EMP.JOB%TYPE;
    BEGIN
      --执行
      SELECT JOB INTO V_JOB FROM EMP WHERE EMPNO = SPNO;
      IF V_JOB = 'PRESIDENT' THEN
        UPDATE EMP SET SAL = SAL + 1000 WHERE EMPNO = SPNO;
      ELSIF V_JOB = 'MANAGER' THEN
        UPDATE EMP SET SAL = SAL + 500 WHERE EMPNO = SPNO;
      ELSE
        UPDATE EMP SET SAL = SAL + 200 WHERE EMPNO = SPNO;
      END IF;
      COMMIT;
    END;
    ========================================================
    --循环语句–loop
    create table users
    (
    vid number(5),
    uname varchar2(30)
    );
    
    select * from users;
    
    --写一个过程,可以输入用户名,并循环添加10个用户到users表中,用户编号从1开始增加。
    create or replace procedure sp_pro6
    (
    spname varchar2
    )is
    --定义 :=表示赋值
    v_num number:=1;
    begin
    loop
    insert into users values(v_num,spname);
    --判断是否要退出循环
    exit when v_num=10;
    --自增
    v_num:=v_num+1;
    end loop;
    commit;
    end;
    =====================================================
    --循环语句–while循环
    --对于while循环来说,只有条件为true时,才会执行循环体语句,while循环以while...loop开始,以end loop 结束。
    --编写一个过程,可以输入用户名,并循环添加10个用户到users表中,用户编号从11开始增加。
    CREATE OR REPLACE PROCEDURE SP_PRO6(SPNAME VARCHAR2) IS
      --定义 :=表示赋值
      V_NUM NUMBER := 11;
    BEGIN
      WHILE V_NUM <= 20 LOOP
        --执行
        INSERT INTO USERS VALUES (V_NUM, SPNAME);
        V_NUM := V_NUM + 1;
      END LOOP;
      COMMIT;
    END;
    ======================================================
    --循环语句–for循环
    CREATE OR REPLACE PROCEDURE SP_PRO6 IS--注意如果无参记得不要加()
    BEGIN
      FOR I IN REVERSE 1 .. 10 LOOP --REVERSE反转函数,表示I从10到1递减,去掉REVERSE表示I从1到10递增
        INSERT INTO USERS VALUES (I, 'shunping');
      END LOOP;
    END;
    ===============================================
    --goto语句
    --goto语句用于跳转到特定符号去执行语句。注意由于使用goto语句会增加程序的复杂性,并使得应用程序可读性变差,所以在做一般应用开发时,建议大家不要使用goto语句。
    --基本语法如下goto lable,其中lable是已经定义好的标号名
    
    DECLARE
      I INT := 1;
    BEGIN
      LOOP
        DBMS_OUTPUT.PUT_LINE('输出i=' || I);
        IF I = 1 THEN
          GOTO END_LOOP;
        END IF;
        I := I + 1;
      END LOOP;
      <<END_LOOP>>
      DBMS_OUTPUT.PUT_LINE('循环结束');
    END;
    ===============================================
    --null语句不会执行任何操作,并且会直接将控制传递到下一条语句。使用null语句的主要好处是可以提高pl/sql的可读性。
    
    DECLARE
      V_SAL   EMP.SAL%TYPE;
      V_ENAME EMP.ENAME%TYPE;
    BEGIN
      SELECT ENAME, SAL INTO V_ENAME, V_SAL FROM EMP WHERE EMPNO = &NO;
      IF V_SAL < 3000 THEN
        UPDATE EMP SET COMM = SAL * 0.1 WHERE ENAME = V_ENAME;
        dbms_output.put_line('1111');
      ELSE
        NULL;
        dbms_output.put_line('2222');--不会被执行
      END IF;
    END;
    

      

  • 相关阅读:
    unity基础之C#基础——[转]大白话系列之C#委托与事件讲解(一)
    [转]ListView滚动到底部自动加载数据
    [转]Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)的用法
    EditText光标不显示
    Android应用实例之---使用Linkify + 正则式区分微博文本链接及跳转处理
    安卓自定义控件
    安卓ViewFlipper和ViewPager
    安卓Binder机制简析
    《深入浅出Mysql》笔记---优化
    《高性能MySQL》學習筆記--索引
  • 原文地址:https://www.cnblogs.com/ipetergo/p/6329543.html
Copyright © 2020-2023  润新知