zoukankan      html  css  js  c++  java
  • oracle 表类型变量的使用

    转载于:http://www.itxuexiwang.com/a/shujukujishu/oracle/2016/0216/89.html?1455872314

    使用记录类型变量只能保存一行数据,这限制了SELECT语句的返回行数​,如果SELECT语句返回多行就会错。Oracle提供了另外一种自定义类型,也就是表类型,它是对记录类型的扩展,允许处理多行数据,类似于表。
    创建表类型的语法如下:
    TYPE table_name IS TABLE OF data_type [ NOT NULL ]
    INDEX BY BINARY_INTEGER ;
    语法说明如下:
    --table_name  创建的表类型名称。
    --IS TABLE  表示创建的是表类型。
    --data_type  可以是任何合法的PL/SQL数据类型,例如varchar2。
    --INDEX BY BINARY_INTEGER  指定系统创建一个主键索引,用于引用表类型变量中的特定行。

    使用表类型的例子:

     例一:直接对表类型变量赋值

    declare
    type my_emp is table of scott.emp%rowtype
    index by binary_integer;
    new_emp my_emp;
    begin
    new_emp(1).empno:=6800;
    new_emp(1).ename:='tracy';
    new_emp(1).job:='clerk';
    new_emp(1).sal:=2500;
    new_emp(2).empno:=6900;
    new_emp(2).ename:='luck';
    new_emp(2).job:='manager';
    new_emp(2).sal:=4000;
    dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
    ','||new_emp(1).sal);
    dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
    ','||new_emp(2).sal);
    end;
    /

    例二:使用表类型变量的方法:变量名.方法名[索引号]

    declare
    type my_emp is table of scott.emp%rowtype
    index by binary_integer;
    new_emp my_emp;
    begin
    new_emp(1).empno:=6800;
    new_emp(1).ename:='tracy';
    new_emp(1).job:='clerk';
    new_emp(1).sal:=2500;
    new_emp(2).empno:=6900;
    new_emp(2).ename:='luck';
    new_emp(2).job:='manager';
    new_emp(2).sal:=4000;
    dbms_output.put_line(new_emp.first||','||new_emp.count||','||new_emp.last);
    dbms_output.put_line(new_emp(1).empno ||','||new_emp(1).ename||','||new_emp(1).job||
    ','||new_emp(1).sal);
    dbms_output.put_line(new_emp(2).empno ||','||new_emp(2).ename||','||new_emp(2).job||
    ','||new_emp(2).sal);
    --new_emp.delete(1);
    dbms_output.put_line(new_emp.next(1));
    end;
    //

    例三:与游标结合使用#p#分页标题#e#
    declare
    type my_emp is table of scott.emp%rowtype
    index by binary_integer;
    new_emp my_emp;
    v_num number:=0;
    cursor cur_emp is select empno,ename,job,sal from scott.emp;

    begin
    for v_emp in cur_emp loop
    v_num:=v_num+1;
    select * into new_emp(v_num) from scott.emp
    where ename=v_emp.ename;
    end loop;

    for i in 1..new_emp.count loop
    dbms_output.put_line(new_emp(i).empno ||','||new_emp(i).ename||','||new_emp(i).job||
    ','||new_emp(i).sal);
    end loop;

    end;
    /
    注意:不能直接对表变量赋值:select * into new_emp from scott.emp where deptno=30; 这种赋值方法是错的,赋值需要使用下标,如上面的的例子。

  • 相关阅读:
    MAC Operation not permitted
    Failed to connect to raw.githubusercontent.com port 443
    Ubuntu adb 报错:no permissions (user in plugdev group; are your udev rules wrong?);
    mysql随机抽取数据
    git 初始创建项目
    VS Code 中的代码自动补全和自动导入包
    25个ssh命令行技巧
    KaTex语法说明
    聊聊OkHttp实现WebSocket细节,包括鉴权和长连接保活及其原理!
    面试官:“看你简历上写熟悉 Handler 机制,那聊聊 IdleHandler 吧?”
  • 原文地址:https://www.cnblogs.com/itxuexiwang/p/5201587.html
Copyright © 2011-2022 走看看