• PL/sql中如何声明变量,常量,控制语句及for,loop,while和顺序控制的使用


    pl/sql

    什么是PL/SQL

      PL/SQL是结合oracle过程语言和机构化查询运行(SQL) 的一种扩展语言。使用PL/SQL可以编写具有很多高级功能的程序,有以下优点

    •  PL/SOL可以采用过程性语言控制程序的结构,也就是说,结构,如判断。循环等程序结构。
    •  同其他的编程语言一样,PL/SOL可以对程序中的错误进行自动处理,误时不会中断,即它的异常处理机制。
    •  PL/SOL程序块具有更好的可移植性,可以移植到另一个Cracle数据库中。
    •  PL/SOL程序减少了网络的交互,有助于提高程序性能。

    常量和变量的声明与赋值

    声明并赋值:

    declare
    /*
    ||注意命名规则
    ||名称不能超过30个字符
    ||第一个字符必须为字母
    ||不区分大小写
    ||不能用 减号
    ||不能是SQL保留字 
    */
    --声明变量
      ename varchar2(20)
    --声明常量 赋值是用 := 赋值 '='用于比较
      c_rate_incr constant number(7,2):=1.10
    begin
    end;

    赋值:

    --声明变量
      v_ename varchar2(20);
    --声明常量并使用 :=赋值
      c_rate_incr constant number(7,2):=1.10;
    begin
      --通过select in同给变量赋值
      select ename into v_ename from emp
      where empno='7788';
      Dbms_Output.put_line('变量:'||v_ename);
    end;

    结果

    这种操作只能返回单行数据多了会报错

    属性类型

    使用%TYPE属性的优点在于:

    • 可以不必知道所引用的数据库列的数据类型。
    • 所引用的数据库列的数据类型可以实时改变, 容易保持一一致,不用修改PL/S0L 程序。

    %ROWTYPE返回一个记录类型,其数据类型和数据库表的数据结构相一致,这时可以使用%FOWTIFE,使用%ROWTYPE属性的优点在于:

    • 可以不必知道所引用的数据库中列的个数和数据类型。
    • 所引用的数据库中列的个数和数据类型可以实时改变,容易保持一致不用修改PL/S0L 程序。

    简单来讲 %type相当于一个普通的变量类型(字符或者数值),而%rowtype则是相当于集合可以保存多个变量信息

    %type举例:

    declare
    --声明变量
      v_ename emp.ename%type;--声明常量并使用 :=赋值
      c_rate_incr constant number(7,2):=1.10;
    begin
      --通过select in同给变量赋值
      select ename into v_ename from emp
      where empno='7788';
      Dbms_Output.put_line('变量:'||v_ename);
    end;

    结果

    %rowtype举例:

    declare
    --声明变量
      v_ename emp%rowtype;
    --声明常量并使用 :=赋值
      c_rate_incr constant number(7,2):=1.10;
    begin
      --通过select in同给变量赋值
      select * into v_ename from emp
      where empno='7788';
      Dbms_Output.put_line('变量:'||v_ename.job||'--sal:'||v_ename.sal);
    end;

    结果

    pl/sql中的控制语句

    if控制语句

    begin
      if 9>0 then
        Dbms_Output.put_line('9>0');
      else if 0>1 then
        Dbms_Output.put_line('0>1 ');     
      else
        Dbms_Output.put_line('9<0');
      end if;
    end;

    结果:

    case语句

    --case 也就是switch一样的功能
    begin
      case 2
         when 1 then
            Dbms_Output.put_line('2是1');
         when 3 then
            Dbms_Output.put_line('2是3');
         else
            Dbms_Output.put_line('2是2');
         end case;
    end;

    结果:

    loop循环

    --loop
    begin
      loop
        Dbms_Output.put_line('loop也就是do-while');
        exit when 9>0;
      end loop;
    end;

    结果:

    for循环

    --for
    begin
     for i in 1..6 loop
       Dbms_Output.put_line('i:'||i);
     end loop;    
    end;

    结果:

    while循环

    --while
    begin
      while 6>0 loop   
         Dbms_Output.put_line('6>0');
        exit;
       end loop;
    end;
    • exit:跳出当前循环,使循环结束(相当与其他编程语言里面的break)
    • continue:结束本次循环,进入下一次循环
    • return:结束当前过程或者函数

    顺序控制

      顺序控制用于按顺序执行语句.顺序语句包括null语句和goto语句goto不推荐使用

    --顺序控制
    begin
       if 6>0 then
         null;--为了使语法变得有意义,去掉null会报错
       else
          Dbms_Output.put_line('6>0');
       end if;
    end;

      null语句是一个可执行语句,相当于一个占位符或不执行任何操作的空语句,它可以使得某些语句变得有意义,提高程序可读性,保证其他语句结构

    的完整性和正确性.

    begin
       if 6>0 then
         goto end_loop;--跳转到  <<end_loop>> 此标记是自定义 
       else
         null;
       end if;
       <<end_loop>>
       Dbms_Output.put_line('6>0');
    end;
    • 标签<<end_loop>>后面接一条可执行的语句,不能直接跟END IF或者其他END;
    •  属于plsql控制语句,用于程序控制非条件跳至指定标签<<???>>。不易控制和维护,慎用!
  • 相关阅读:
    .net core 大文件分片上传
    Python 运算符
    CF1398G Running Competition FFT
    Luogu「StOI-2」简单的树 树链剖分+线段树+倍增
    LOJ#3145. 「APIO2019」桥梁 分块+可撤销并查集
    【UNR #4】序列妙妙值 分块+DP
    LuoguP5008 [yLOI2018] 锦鲤抄 tarjan+贪心
    windows提权
    基于 Laravel 框架的内容管理系统
    趣谈、浅析CRLF和LF
  • 原文地址:https://www.cnblogs.com/hfx123/p/9938949.html
Copyright © 2020-2023  润新知