我是PL / SQL的新手,并且正在使用混合表,所以如果我错过了一些明显的东西,我很抱歉,我以为我已经把大部分主要内容都搞砸了。
我最近遇到了尝试访问类型为OBJECT的VARRAY中的数据的问题。
我正在尝试更改已存储在类型对象的VARRAY中但仍然遇到错误的对象中的某些数据。我尝试访问的表中的列是使用VARRAY作为数据类型创建的。
我有一个对象:
CREATE TYPE MY_OBJECT AS OBJECT
MY_OBJECT有两个值,DATE和一个char。
然后,此对象用于将列的数据类型定义为OBJECT类型的VARRAY:
CREATE TYPE MY_COLUMN AS VARRAY(100) of MY_OBJECT
我已经在Stackoverflow上发布了两个帖子来尝试解决我的问题,如下所示:
如何使用简单的更新语句更新表中的varray类型?
SQL Retrieving an object from VARRAY in Oracle 11g Database
以下是我通过尝试访问数据后所拥有的内容,以便我可以对其进行更改。
UPDATE my_table SET my_column = (my_object(date), my_object('X'));
我也试过
UPDATE my_table SET my_column = (date, 'X');
这两次尝试引发了#34; Missing Right Paraenthesis"错误,所以我继续采用不同的方法。
INSERT INTO my_table
VALUES
(
1, my_column(varray)(my_object(1, date, 'X'))
);
这会引发一个"没有足够的价值"错误。
我的问题分为两部分:
1)表中总共有60列,以便绕过这个"没有足够的值"我是否必须输入每列的值?
我以为我可以直接访问该列而无需处理我不需要访问的任何其他列。
2)为了访问数组中的对象,是否可以进行单个对象调用(如我的第三次尝试)?
我希望只是尝试访问my_column,访问VARRAY,然后访问VARRAY中的对象,以便我可以根据需要在对象中添加或更改数据。
我认为这很直接,但我整天都在圈子里。
非常感谢任何建议!
答案 0 :(得分:0)
我需要有关insert语句的上下文的更多信息。对于独立的INSERT
,这是一个有效的语法示例。
CREATE TYPE MY_OBJECT AS OBJECT
(
a_date date,
a_char varchar2(1)
);
CREATE TYPE MY_COLUMN AS VARRAY(100) of MY_OBJECT;
create table my_table
(
col1 number,
my_columns my_column
);
INSERT INTO my_table
VALUES(1, my_column(my_object(sysdate, 'X')));