标签: varray

如何在Oracle PL SQL中定义类似字典的字典?

如何在PL/SQL中定义以下结构:

包含多行的字符串列表.

例:

'User A'
    -->
        (1)
            -->
                1
        (2)
            -->
                2


'User B'
    -->
        (1)
            -->
                0
        (2)
            -->
                9
Run Code Online (Sandbox Code Playgroud)

整数定义为:

TYPE number_arry IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
Run Code Online (Sandbox Code Playgroud)

如何定义整个结构?

我想从这个表填充这个结构:

RowId | User_A | User_B  
------+--------+--------
1     |      1 |      0
2     |      2 |      0
3     |      3 |      9
Run Code Online (Sandbox Code Playgroud)

有了这些陈述:

CURSOR c1
        IS
            SELECT User_A, User_B FROM my_table;

OPEN c1;
    LOOP
        FETCH c1
          BULK COLLECT INTO
                my_dict('User A'),
                my_dict('User B')

        LIMIT 1000;

        EXIT WHEN c1%NOTFOUND; …
Run Code Online (Sandbox Code Playgroud)

sql oracle varray

3
推荐指数
1
解决办法
2907
查看次数

如何使用循环向 VARRAY 添加值

我有一个 VARRAY,我想通过使用循环向这个 VARRAY 添加元素。这是我到目前为止所尝试的。

DECLARE
TYPE code_array_  IS VARRAY(26) OF VARCHAR2(6);
codes_ code_array_;

BEGIN
FOR i IN 1..26 LOOP    
    codes_(i) := dbms_random.string('U',6);
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

上面的代码给了我一个错误

“ORA-06531:对未初始化集合的引用”

plsql oracle11g varray

3
推荐指数
1
解决办法
2万
查看次数

如何初始化{TABLE}%ROWTYPE的varray表?

我有一个varray定义如下:

declare
    TYPE tnr_l IS VARRAY(30) of lve%ROWTYPE;
Run Code Online (Sandbox Code Playgroud)

我希望使用数据库中的fetch初始化此varray:

select * into tnr_l from lve where type = 'TNR' order by value;
Run Code Online (Sandbox Code Playgroud)

但这失败了:

.ORA-06550: line 6, column 23:
PLS-00321: expression 'TNR_L' is inappropriate as the left hand side of an
assignment statement
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

oracle plsql initialization varray ora-06550

2
推荐指数
1
解决办法
8479
查看次数

PLSQL /如何在关联数组的迭代期间添加值

我在程序PLSQL中需要这样的东西

 arrayCount:=parArray.Count;
 For i In 1 .. arrayCount Loop
    lsPar(i):=parArray(i);
 End Loop;
Run Code Online (Sandbox Code Playgroud)

可能吗?求求建议!:)

sql plsql varray

2
推荐指数
1
解决办法
2万
查看次数

PL / SQL VARRAY的最大大小

我试图找出PL / SQL中VARRAY 的可能上限

我们肯定可以将VARRAY类型定义为

TYPE type_name IS {VARRAY | VARYING ARRAY} (size_limit) 
   OF element_type [NOT NULL];
Run Code Online (Sandbox Code Playgroud)

Oracle文档中这样说:

每个varray都存储为单个对象,可以在其表的内部是一列(如果varray小于4KB),也可以在表的外部,但仍存储在同一表空间中(如果varray大于4KB)。您必须同时更新或检索varray的所有元素,这在一次对所有元素执行某些操作时最合适。但是您可能会发现以这种方式存储和检索大量元素是不切实际的。

但是size_limit参数的上限是多少?它等于无符号整数(4,294,967,295)吗?

oracle size plsql database-administration varray

2
推荐指数
1
解决办法
6417
查看次数

如何在表中使用打包类型作为列类型?

我目前正在尝试了解如何使用我在包中创建的类型作为我的表中的列类型.

这是我的包裹的代码......

create or replace PACKAGE  MY_TYPES
IS 
--Associative Array Types 
TYPE permutation_array IS TABLE OF VARCHAR2(300) INDEX BY PLS_INTEGER; 

--VARRAY Types
TYPE code_array IS VARRAY(4) OF VARCHAR2(9); 
Run Code Online (Sandbox Code Playgroud)

那我的桌子......

CREATE TABLE mastermind.match_table (match_id NUMBER(4), code_breaker_id NUMBER(4) , 
code_breaker_name VARCHAR2(200),
code_master_id NUMBER(4),
code_master_name VARCHAR2(200),
winner_id NUMBER(4),
game_code MY_TYPES.code_array );
Run Code Online (Sandbox Code Playgroud)

我收到了错误......

从命令行中的第3行开始出错 - CREATE TABLE mastermind.match_table(match_id NUMBER(4),code_breaker_id NUMBER(4),code_breaker_name VARCHAR2(200),code_master_id NUMBER(4),code_master_name VARCHAR2(200),winner_id NUMBER(4) ,game_code MASTERMIND_COLLECTION_TYPES.code_array)错误报告 - ORA-00902:无效的数据类型00902. 00000 - "无效的数据类型"*原因:
*操作:

任何人都可以协助吗?这将不胜感激.

database oracle plsql user-defined-types varray

2
推荐指数
1
解决办法
35
查看次数

如何在 Oracle Varray 中选择值

在 Oracle 11.2 中工作

我为与员工相关联的电话号码创建了一个类型.... 我正在尝试学习语法,不想因数据库设计的好坏而受到批评...

这是我的 *.sql 文件

CREATE TYPE AddressType AS OBJECT(streetNumber NUMBER(5), StreetName VARCHAR2(30), city VARCHAR2(20));
/
CREATE TYPE empName AS OBJECT(firstname VARCHAR2(10), middle VARCHAR2(10), lastname VARCHAR2(10));
/
CREATE TYPE PhoneNumbers AS OBJECT(phNumb NUMBER(10), numType VARCHAR2(10));
/
CREATE TYPE ContactNumbers AS VARRAY(5) OF PhoneNumbers;
/

CREATE TABLE Workers(eid NUMBER(5), name empName, loc AddressType,    contactNums ContactNumbers);

INSERT INTO Workers VALUES( 1,
                        empName('Ramos', null, 'Phil'), 
                        AddressType(123, 'A Street', 'San Diego'), 
                        ContactNumbers(
                                    PhoneNumbers(1234567890, 'cell'),
                                    PhoneNumbers(2345678901, 'home')
                                    )
                      );


--Display all …
Run Code Online (Sandbox Code Playgroud)

sql oracle varray

1
推荐指数
1
解决办法
7640
查看次数