zoukankan      html  css  js  c++  java
  • PL/SQL学习笔记变量作用域及数据类型深入

    一:变量作用域

    DECLARE
    current_block VARCHAR2(10) := 'Outer';
    outer_block VARCHAR2(10) := 'Outer';
    BEGIN
    dbms_output.put_line('[current_block]['||current_block||']');
      DECLARE
      current_block VARCHAR2(10) := 'Inner';
      BEGIN
      dbms_output.put_line('[current_block]['||current_block||']');
      dbms_output.put_line('[outer_block]['||outer_block||']');
      END;
    dbms_output.put_line('[current_block]['||current_block||']');
    END;


    以上为引用一本书的代码(Oracle Database 11g PL/SQL程序设计)
    输出为

    [current_block][Outer]
    [current_block][Inner]
    [outer_block][Outer]
    [current_block][Outer]


    这是两个嵌套的程序块
    我们在子程序块中重定义了父程序块的变量
    这个变量在子程序块执行完之后又恢复了父程序块中定义的值

    二:%type    取一个已知变量的数据类型

    declare mytitle labor.xland.title%type;
    begin
    select title into mytitle from labor.xland where state = 0;
    dbms_output.put_line(mytitle);
    end;


    上面例子中取了表title列的数据类型(varchar2)
    然后检索了一行一列数据,把这个数据赋值给我们定义的变量mytitle
    当然你也可以定义多个变量
    如:
    select title,id into mytitle,myid from labor.xland where state = 0;

    三:%rowtype   取一个已知行的数据类型,这应该是一个对象类型

    declare 
      myrow labor.xland%rowtype;
    begin
    select * into myrow from labor.xland where state = 0;
    dbms_output.put_line(myrow.title);
    dbms_output.put_line(to_char(myrow.state));
    end;


    上例中我们取了某个表的rowtype,并定义了变量myrow
    接着把这个表的一行数据赋值给了这个变量
    输出的时候只要以点来获取这一行的某个列即可

    四:record   这应该也是一个对象

    declare
      type myrecordtype is record
      (
           mytitle labor.xland.title%type,
           mystate labor.xland.state%type
      );
      myrecord myrecordtype;
    begin
    select title, state into myrecord from labor.xland;
    dbms_output.put_line(myrecord.mytitle);
    dbms_output.put_line(to_char(myrecord.mystate));
    end;

    如上代码
    我们先定义了一种数据类型(type)
    这种类型包含两个属性,分别是mytitle和mystate
    然后我们定义了一个变量myrecord
    这个变量的类型就是我们刚才定义的数据类型
    接着我们把两个数据赋值给类这个变量的两个属性
    这里的赋值顺序是按属性定义的先后顺序给属性赋值的
    然后输出

    至此,数据类型仍未讲完
    还有table(表),array(数组),exception(异常),cursor(游标)等类型等没讲
    异常和游标将在后面的文章提到

  • 相关阅读:
    饿了么ElementUI table遇到的问题
    Window命令行杀进程
    网络监控流量工具
    记一次Linux系统被入侵的过程
    sftp ftp文件同步方案
    清除oracle归档日志
    TCP连接复用
    Sftp搭建与配置参考
    setfacl命令
    tips
  • 原文地址:https://www.cnblogs.com/liulun/p/1530819.html
Copyright © 2011-2022 走看看