0

私は PL/SQL を初めて使用し、ハイブリッド テーブルを扱っているので、明らかなことを見逃していたら申し訳ありません。

最近、タイプ OBJECT の VARRAY のデータにアクセスしようとすると問題が発生しました。

オブジェクト型の VARRAY に格納されているオブジェクトの一部のデータを変更しようとしていますが、エラーが発生し続けます。アクセスしようとしているテーブルの列は、VARRAY をデータ型として使用して作成されました。

私はオブジェクトを持っています:

CREATE TYPE MY_OBJECT AS OBJECT

MY_OBJECT には、DATE と 1 つの文字の 2 つの値があります。

次に、このオブジェクトを使用して、列のデータ型を OBJECT 型の VARRAY として定義します。

CREATE TYPE MY_COLUMN AS VARRAY(100) of MY_OBJECT

以下にリストされている問題を解決するために、Stackoverflow に 2 つの投稿を行いました。

簡単な更新ステートメントでテーブル内の varray 型を更新する方法は?

SQL Oracle 11g データベースの VARRAY からオブジェクトを取得する


これは、データにアクセスして変更できるようにするためにそれらを通過した後のものです。

UPDATE my_table SET my_column = (my_object(date), my_object('X'));

私も試しました

UPDATE my_table SET my_column = (date, 'X');

これらの 2 つの試行は「Missing Right Paraenthesis」エラーをスローするため、別の方法に進みました。

INSERT INTO my_table 
VALUES
( 
1, my_column(varray)(my_object(1, date, 'X'))
);

これにより、「値が不足しています」というエラーがスローされます。

私の質問には2つの部分があります:

1) テーブルには合計 60 列ありますが、この「値が不足しています」というエラーを回避するには、各列に値を入力する必要がありますか?

アクセスする必要のない他の列を処理することなく、列に直接アクセスできると思いました。

2) 配列内のオブジェクトにアクセスするには、単一のオブジェクト呼び出し (3 回目の試行のように) が適していますか?

オブジェクトで必要に応じてデータを追加または変更できるように、my_column にアクセスして VARRAY にアクセスし、VARRAY 内のオブジェクトにアクセスすることを望んでいました。

かなり簡単だと思っていましたが、一日中ぐるぐる回っていました。

どんなアドバイスでも大歓迎です!

4

1 に答える 1

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')));
    
于 2014-10-30T01:12:02.520 に答える