2014-10-29 2 views
0

Я новичок в PL/SQL и работаю с гибридными таблицами, поэтому, извините, если я пропустил что-то очевидное, я думал, что получил большую часть основного материала.Доступ к данным внутри объекта, который находится в VARRAY Oracle

Недавно я столкнулся с проблемой с попыткой доступа к данным в VARRAY типа OBJECT.

Я пытаюсь изменить некоторые данные в объекте, который был сохранен в объекте типа VARRAY, но продолжает работать с ошибками. Столбец в таблице, который я пытаюсь получить, был создан с использованием VARRAY в качестве типа данных.

У меня есть объект:

CREATE TYPE MY_OBJECT AS OBJECT 

my_object имеет два значения, дата и один символ.

Затем этот объект используется для определения типа данных столбца в качестве VARRAY типа OBJECT:

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'); 

Эти две попытки бросить "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
  1. Да, вы должны ввести все значения, если используете конструктор по умолчанию.
  2. Мне нужна дополнительная информация о контексте вашего оператора 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'))); 
    
+0

Спасибо за вашу помощь, ваше понимание привело меня, чтобы найти то, что работал. Вы можете использовать такой синтаксис, как UPDATE my_table SET my_column SET = (my_array (my_object (TO_DATE ('date', 'mm/dd/yyyy'), ('X'))); – user3183843

Смежные вопросы