在创建或PL模拟二维数组/ SQL [英] Creating or simulating two dimensional arrays in PL/SQL

查看:251
本文介绍了在创建或PL模拟二维数组/ SQL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

能否请你帮我,我怎么可以创建PL / SQL二维数组存储过程?列是动态的,因此它可以成长和类型也随之变化。
任何帮助是AP preciated。谢谢你在前进!

我有以下的code:

 键入CAR_TABLE_ARRAY是VARRAY(2)的VARCHAR2(255);
TYPE CAR_TABLE_TYPE IS CAR_TABLE_ARRAY表;
CAR_TABLE CAR_TABLE_TYPE;CAR_TABLE:= CAR_TABLE_TYPE();
CAR_TABLE.EXTEND(10);
CAR_TABLE(1)(1):='道奇';
CAR_TABLE(2)(1):='福特';
CAR_TABLE(3)(1):='野马';
CAR_TABLE(4)(1):='EDSEL';
CAR_TABLE(5)(1):='斯图特贝克';DBMS_OUTPUT.PUT_LINE('1'|| CAR_TABLE(1)(1));
DBMS_OUTPUT.PUT_LINE('2'|| CAR_TABLE(2)(1));
DBMS_OUTPUT.PUT_LINE('3'|| CAR_TABLE(3)(1));
DBMS_OUTPUT.PUT_LINE('4'|| CAR_TABLE(4)(1));
DBMS_OUTPUT.PUT_LINE('5'|| CAR_TABLE(5)(1));

当我跑我得到以下错误:


  

ORA-06531:引用未初始化的收集



解决方案

下面是在PL / SQL使用多维数组的一个例子。这里我使用包含数组的数组。

 申报  类型t_features是PLS_INTEGER为varchar(100)指数表;
  类型t_car_rec是记录
  (
    使VARCHAR2(50)
    模型VARCHAR2(50)
    功能t_features
  );  类型t_car_tab是PLS_INTEGER t_car_rec指数表;
  car_tab t_car_tab;  程序show_detail是
    car_idx PLS_INTEGER;
    features_idx PLS_INTEGER;
  开始
    car_idx:= car_tab.first;
    循环
      当car_idx为空退出;
      DBMS_OUTPUT.PUT_LINE('的详细信息'|| car_tab(car_idx)。使||''|| car_tab(car_idx).MODEL);      features_idx:= car_tab(car_idx).features.first;
      循环
        当features_idx为空退出;
        DBMS_OUTPUT.PUT_LINE('=>'|| car_tab(car_idx)。特点(features_idx));        features_idx:= car_tab(car_idx).features.next(features_idx);
      结束循环;      car_idx:= car_tab.next(car_idx);
    结束循环;
  结束;开始   - 使用顺序索引值
  car_tab(1)。使:='法拉利';
  car_tab(1)。模型:='特斯坦罗萨';
  car_tab(1)。特点(1):='快';
  car_tab(1)。特点(2):='看起来很酷;
  car_tab(1)。特点(3):='昂贵';   - 使用随机指标值(疏)
  car_tab(2)。使:='极品';
  car_tab(2).MODEL:='TSX';
  car_tab(2)■特征(14):='小';
  car_tab(2)。特点(200):='好省油;
  car_tab(2)■特征(36):='便宜';  show_detail;结束;

输出是:

 法拉利特斯坦罗​​萨详情
  = GT;快速
  = GT;看起来很酷
  = GT;贵
讴歌TSX详情
  = GT;小
  = GT;价格低廉
  = GT;良好MPG

希望帮助

Can you please help me how can I create two dimensional array in PL/SQL for Stored Procedure? The columns are dynamic so it can grow and change in types also. Any help is appreciated. Thank you in advance!

I have the following code:

Type CAR_TABLE_ARRAY is varray(2) of varchar2(255);
TYPE CAR_TABLE_TYPE IS TABLE OF CAR_TABLE_ARRAY;
CAR_TABLE CAR_TABLE_TYPE;

CAR_TABLE := CAR_TABLE_TYPE();
CAR_TABLE.EXTEND(10);
CAR_TABLE(1)(1) := 'DODGE';
CAR_TABLE(2)(1) := 'FORD';
CAR_TABLE(3)(1) := 'MUSTANG';
CAR_TABLE(4)(1) := 'EDSEL';
CAR_TABLE(5)(1) := 'STUDEBAKER';

DBMS_OUTPUT.put_line( '1 ' || CAR_TABLE(1)(1) );
DBMS_OUTPUT.put_line( '2 ' || CAR_TABLE(2)(1) );
DBMS_OUTPUT.put_line( '3 ' || CAR_TABLE(3)(1) );
DBMS_OUTPUT.put_line( '4 ' || CAR_TABLE(4)(1) );
DBMS_OUTPUT.put_line( '5 ' || CAR_TABLE(5)(1) );

When I run I get the following error:

ORA-06531: Reference to uninitialized collection

解决方案

Here's an example of using an multidimensional array in pl/sql. Here I use an array containing an array.

declare

  type t_features is table of varchar(100) index by pls_integer;
  type t_car_rec is record
  (
    make varchar2(50),
    model varchar2(50),
    features t_features
  );

  type t_car_tab is table of t_car_rec index by pls_integer;
  car_tab t_car_tab;

  procedure show_detail is
    car_idx pls_integer;
    features_idx pls_integer;
  begin
    car_idx := car_tab.first;
    loop
      exit when car_idx is null;
      dbms_output.put_line('Details for ' || car_tab(car_idx).make || ' ' || car_tab(car_idx).model);

      features_idx := car_tab(car_idx).features.first;
      loop
        exit when features_idx is null;
        dbms_output.put_line('   =>' || car_tab(car_idx).features(features_idx));

        features_idx := car_tab(car_idx).features.next(features_idx);
      end loop;

      car_idx := car_tab.next(car_idx);
    end loop;
  end;

begin

  -- using sequential index values
  car_tab(1).make := 'Ferrari';
  car_tab(1).model := 'Testarossa';
  car_tab(1).features(1) := 'Fast';
  car_tab(1).features(2) := 'Looks cool';
  car_tab(1).features(3) := 'Expensive';

  -- using random index values (sparse)
  car_tab(2).make := 'Acura';
  car_tab(2).model := 'TSX';
  car_tab(2).features(14) := 'Small';
  car_tab(2).features(200) := 'Good MPG';
  car_tab(2).features(36) := 'Inexpensive';

  show_detail;

end;

Output would be:

Details for Ferrari Testarossa
  =>Fast
  =>Looks cool
  =>Expensive 
Details for Acura TSX
  =>Small
  =>Inexpensive
  =>Good MPG

Hope that helps

这篇关于在创建或PL模拟二维数组/ SQL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆