zoukankan      html  css  js  c++  java
  • pl/sql--基本的语法及操作

    一:plsql总内容概括

    1.pl/sql基本的语法结构
      declare,begin,exception,end,:=,=,等关键字 字符

      plsql命令窗口打印输出结果命令:set serveroutput on;
      打印输出命令:dbms_output.put_line('hello world');
    2.记录类型 type ... is record( , , );(相当于java的成员变量) 3.流程控制 3.1 条件判断(两种) 方式一: if ... then ... elsif ... then ... else ... end if;(常用) 方式二: case ... when ... then ... end; 3.2 循环结构(三种) 方式一: loop ... exit when... end loop; 方式二: while...loop ... end loop; 方式三: for i in ... loop ... end loop;(常用) 3.3 关键字 相当于 java(break) goto 跳出循环
              eg:goto label;
                <<label>>
                  写处理
    exit 退出 4.游标的使用(类似于java中的Iterator迭代器,用于集合的遍历),游标基本不处理,直接把结果返回给程序处理,例如java的list
        4.1显示游标
          (1)定义游标 (2)打开游标 (3)提取游标 (4)对游标进行循环操作:判断游标中是否有下一条记录 (5)关闭游标
        4.2隐式游标
    5.异常的处理(三种方式) 6.存储 可以声明out参数返回 6.1存储函数:有返回值 6.2存储过程:没有返回值return 7.触发器 8.索引 9.视图

    二:变量的声明方式

      1.指定类型声明,以及长度(类型与表中的类型一致,长度要大于等于表中字段长度)
        
      v_sal number(10,2);
      v_email varchar2(20);
      v_hire_date date;
      
      2.直接将表中字段的属性赋给变量(推荐),不易出错
    
      v_sal employees.salary%type;
      v_email employees.email%type;
      v_hire_date employees.hire_date%type;

    三.定义记录类型record(java中的内对象)

     1.声明一个记录类型  注意类成员后面用逗号,最后一个不加逗号.括号后面用分号
      type emp_record is record(
        v_sal employees.salary%type,
        v_email employees.email%type,
        v_hire_date employees.hire_date%type
      );
      --定义一个记录类型的成员变量
      v_emp_record emp_record;--后面直接可以用v_emp_record .变量名调用
    例子:  dbms_output.put_line('工资'||v_emp_record.v_sal||',邮件'||v_emp_record.v_email||',日期'||v_emp_record.v_hire_date);
    
    2.直接创建一个表的记录类型  %rowtype(推荐使用)
      表中所有字段以及其类型都会声明到这个记录类型中,以便于后面调用
      v_emp_record employees%rowtype;
    
    例子:  dbms_output.put_line('工资'||v_emp_record.salary||',邮件'||v_emp_record.email||',日期'||v_emp_record.hire_date);

    四:赋值问题  := 与  =

    declare
      v_emp_id number(10);
    begin
      v_emp_id:=123;
      update employees
      set salary=salary+100
      where employee_id =v_emp_id;
      dbms_output.put_line('执行成功');
    end;
    --变量赋值用 :=
    --sql里面赋值用  =
    --plsq函数判断等于用  =
    

    五:条件判断语句 (两种)   (建议使用if..else)能处理多种条件判断,case不行

    1.if ... then ... elsif ... then ... else ... end if;

    --要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000';
    --若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'
    declare
      v_sal employees.salary%type;--表结构记录类型
      v_temp varchar2(50);
    begin
      select salary into v_sal
      from employees where employee_id=150;
    
      if v_sal>=10000
         then v_temp:= 'salary >= 10000';
      elsif v_sal>=5000
         then v_temp:= '5000<= salary < 10000';
      else
         v_temp:= 'salary < 5000';
      end if;
      dbms_output.put_line('真实工资:'||v_sal||  ',   输出的信息:'||v_temp);
    end;

    2.case ... when ... then ... end;

     (1)number 数字case

    --要求: 查询出 150号 员工的工资, 若其工资大于或等于 10000 则打印 'salary >= 10000';
    --若在 5000 到 10000 之间, 则打印 '5000<= salary < 10000'; 否则打印 'salary < 5000'
    declare
      v_sal employees.salary%type;
      v_temp varchar2(50);
    begin
      select salary into v_sal
      from employees where employee_id=150;
       v_temp:=
       case trunc(v_sal/5000) when 0 then  'salary >= 10000'
                              when 1 then  '5000<= salary < 10000'
                              else  'salary < 5000'
       end;
       dbms_output.put_line('真实工资:'||v_sal||  ',   输出的信息:'||v_temp);
    end;

    (2)varchar2字符串 case

    --要求: 查询出 122 号员工的 JOB_ID, 若其值为 'IT_PROG', 则打印 'GRADE: A';
    --'AC_MGT', 打印 'GRADE B', 'AC_ACCOUNT', 打印 'GRADE C'; 否则打印 'GRADE D'
    declare
      v_job_id employees.job_id%type;
      v_temp varchar2(20);
    begin
      select job_id into v_job_id
      from employees where employee_id=122;
      v_temp:=
      case v_job_id when 'IT_PROG' then 'GRADE: A'
                    when 'AC_MGT' then 'GRADE B'
                    when 'AC_ACCOUNT' then 'GRADE C'
                    else 'GRADE D'
      end;
      DBMS_OUTPUT.put_line('job_id:'||v_job_id||' 打印信息:  '||v_temp);
    end;

    六:循环结构(三种),只介绍 for i in ... loop ... end loop;最常用

     1.语法介绍

    -- 使用循环语句打印 1 - 100.(三种方式)
    --①初始化条件②循环体③循环条件④迭代条件
    -- 方式一: loop ... exit when...; end loop;
    -- 方式二: while... loop ... end loop;
    -- 方式三: for i in ... loop ... end loop;
    declare
    begin
    
       for c in 1..100 loop
         dbms_output.put_line(c);
       end loop;
       --reverse:倒置,反过来循环
       for c in  reverse 1..100 loop
         dbms_output.put_line(c);
       end loop;
    
       --不支持下面这种从100...1到1的遍历
       /*for c in 100..1 loop
         dbms_output.put_line(c);
       end loop;*/
    end;

     2.例子1..100自然数打印 注意goto,exit关键字用法

    --打印1——100的自然数,当打印到50时,跳出循环,输出“打印结束”
    --(方法一)
    begin
      for i in 1..100 loop
          dbms_output.put_line(i);
          if(i = 50) then
          goto label;
          end if;
      end loop;
          <<label>>
          dbms_output.put_line('打印结束');
    end;
    --(方法二)
    begin
      for i in 1..100 loop
          dbms_output.put_line(i);
          if(i mod 50 = 0) then dbms_output.put_line('打印结束');
          exit;
          end if;
      end loop;
    end;

     七:游标的使用,迭代器左右

  • 相关阅读:
    对抗杀软高级启发(主动防御)技术
    __readfsdword __readgsqword PEB TEB
    net1 user
    vc 获取windows 网卡信息
    RunPE
    windows crpyt API 实现DES 3DES 3DES_112 加解密
    软件开发图标收藏
    有关windows 网卡信息获取
    BCGPContorBar 静态工程设置详解
    (二)特征匹配
  • 原文地址:https://www.cnblogs.com/cbpm-wuhq/p/11951065.html
Copyright © 2011-2022 走看看