如何在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) 我有一个 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:对未初始化集合的引用”
我有一个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)
我怎样才能做到这一点?
我在程序PLSQL中需要这样的东西
arrayCount:=parArray.Count;
For i In 1 .. arrayCount Loop
lsPar(i):=parArray(i);
End Loop;
Run Code Online (Sandbox Code Playgroud)
可能吗?求求建议!:)
我试图找出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)吗?
我目前正在尝试了解如何使用我在包中创建的类型作为我的表中的列类型.
这是我的包裹的代码......
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 - "无效的数据类型"*原因:
*操作:
任何人都可以协助吗?这将不胜感激.
在 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)