2014-10-29 54 views
0

我是PL/SQL的新手,並且使用混合表,所以如果我錯過了某些顯而易見的東西,我很遺憾,我認爲我已經獲得了大部分主要內容。訪問VARRAY中的對象內的數據Oracle

我最近遇到了一個問題,試圖訪問類型爲OBJECT的VARRAY中的數據。

我試圖改變已存儲在類型爲對象的VARRAY的對象中的一些數據,但仍然遇到錯誤。我嘗試訪問的表中的列是使用VARRAY作爲數據類型創建的。

我有一個對象:

CREATE TYPE MY_OBJECT AS OBJECT 

MY_OBJECT有兩個值,日期和一個單一的炭。

這個對象,然後用來定義列的數據類型爲VARRAY類型的對象:

CREATE TYPE MY_COLUMN AS VARRAY(100) of MY_OBJECT 

我已經通過兩個發佈了#2,試圖解決我的問題,列舉如下:

如何用簡單的更新語句更新表中的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'); 

這兩個嘗試拋出一個「缺少右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,這裏是一個工作語法的例子。

    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 2014-10-30 22:01:25