• Oracle---PL/SQL的学习


    PL/SQL程序

    一.定义

    declare

      说明部分

      begin

        语句序列(DML语句)

      exception

        例外处理语句

      end;

    二. 变量和常量说明

    a) 说明变量(char,varchar2,date,number,boolean,long)

      varl char(15);

      married boolean :=true;

      psal number(7,2);

      my_name emp.ename%type;引用型变量,my_name的类型与emp表中的ename列的类型一样

      emp_rec emp%rowtype;记录型变量(一行的类型,是一个数组)

    b) 记录变量分量的引用:

      emp_rec.ename := ‘adams’;(数组中的某一列)

     

    例子:

    declare

      --定义记录型变量:代表一行

      emp_rec emp%rowtype;

    begin

      select * into emp_rec from emp where empno=7839;

      dbms_output.put_line(emp_rec.ename ||’的薪水是’||emp_rec.sal);

    end;

     

      c)定义常量   加个关键字

    varl  constant  char(15);

     

    三. IF语句

    1.

      IF 条件 THEN 语句1;

      语句2

      END IF; 

    2. 

      IF 条件THEN 语句序列1;

      ELSE 语句序列2;

      END IF;

    3.

      IF 条件 THEN 语句;

      ELSIF 语句 THEN 语句;

      ELSE 语句;

      END IF;

     

      if 条件  then 语句

      elsif 条件 then 语句

      elsif 条件 then 语句

    四. 循环语句

    1. WHILE循环

    while total <=25000

    loop

    .....

    total :=total + salary;

    end loop;

    2. for in 循环

      FOR xxx  IN 1..3

      LOOP

      语句序列;

      END LOOP;

     

    例子:

     

    --打印1~10

    set serveroutput on ;

     

    declare

      pnum number := 1;

    begin

      loop

        --退出条件

        exit when pnum > 10;

        DBMS_OUTPUT.PUT_LINE(pnum);

        -- 1

        pnum := pnum + 1;

        end loop;

    end;

    五.光标

    --查询并打印员工的姓名和薪水
    /*
    1. 光标的属性:
      %isopen     %rowcount (影响的行数)
      %found      %notfound
    
    2. 默认,一个会话中只能打开300个光标
    SQL> show parameter cursor
    
    NAME                                 TYPE                             VALUE
    ------------------------------------ -------------------------------- -----------
    cursor_sharing                       string                           FORCE
    cursor_space_for_time                boolean                          FALSE
    open_cursors                         integer                          300
    session_cached_cursors               integer                          20
    
    修改: alter system set open_cursors=400;
    
    3. (思考):cursor_sharing 什么作用?---> 性能优化
          EXACT(默认), FORCE, SIMILAR
    
    */
    set serveroutput on
    
    declare
      --定义光标
      cursor cemp is select ename,sal from emp;
      pename emp.ename%type;
      psal   emp.sal%type;
    begin
      --打开光标
      open cemp;
    
      loop
        --取一条记录
        fetch cemp into pename,psal;
        --退出条件
        --exit when 没有取到记录;
        exit when cemp%notfound;
    
        dbms_output.put_line(pename||'的薪水是'||psal);
    
      end loop;
      
      --关闭光标
      close cemp;
    end;
    

      涨工资例子:

    --涨工资,总裁1000 经理800 其他400
    set serveroutput on
    
    declare 
      --alter table "SCOTT"."EMP" rename column "JOB" to empjob
      cursor cemp is select empno,empjob from emp;
      pempno emp.empno%type;
      pjob   emp.empjob%type;
    begin
      rollback;
    
      open cemp;
      loop
        --取一条记录
        fetch cemp into pempno,pjob;
        exit when cemp%notfound;
        
        --判断职位
        if pjob = 'PRESIDENT' then update emp set sal=sal+1000 where empno=pempno;
          elsif pjob = 'MANAGER' then update emp set sal=sal+800 where empno=pempno;
          else update emp set sal=sal+400 where empno=pempno;
        end if;
        
      end loop;
      close cemp;
      
      --why?  ---> ACID
      commit;
      
      dbms_output.put_line('完成');
    end;
  • 相关阅读:
    BOM-Window窗口对象
    BOM
    案例:电灯开关
    事件简单学习
    简单学习
    ECMAScript基本对象——Global全局对象
    ECMAScript基本对象——RegExp 正则表达式对象
    ECMAScript基本对象——String 对象
    zk安装管理
    kafka服务器批量copy文件脚本
  • 原文地址:https://www.cnblogs.com/lingtiaoti/p/9919630.html
Copyright © 2020-2023  润新知