sql >> データベース >  >> RDS >> Oracle

ネストされたテーブルのデータを失うことなく、そのテーブルに値を挿入するにはどうすればよいですか?

    MULTISET UNION [ALL|DISTINCT]を使用します 演算子:

    SQLフィドル

    Oracle11gR2スキーマのセットアップ

    CREATE OR REPLACE TYPE businessTableForCategories AS TABLE OF VARCHAR(128);
    /
    
    CREATE TABLE Category (
    name                    VARCHAR(128) PRIMARY KEY,
    businesses              businessTableForCategories
    ) NESTED TABLE businesses STORE AS categoryBusinessTable
    /
    
    INSERT INTO Category VALUES (
      'Restaurant',
      businessTableForCategories('xzqpehc234ajdpa8')
    )
    /
    
    UPDATE Category
    SET businesses = businesses
                     MULTISET UNION ALL 
                     businessTableForCategories('other_value')
    WHERE name = 'Restaurant'
    /
    

    クエリ1

    SELECT *
    FROM   category
    

    結果

    |       NAME |                   BUSINESSES |
    |------------|------------------------------|
    | Restaurant | xzqpehc234ajdpa8,other_value |
    

    クエリ2

    または、バインド変数を使用して、コレクションをクエリに含めます。

    DECLARE
      businesses businessTableForCategories := businessTableForCategories();
    BEGIN
      businesses.EXTEND( 10000 );
      FOR i IN 1 .. 10000 LOOP
        businesses(i) := DBMS_RANDOM.STRING( 'x', 128 );
      END LOOP;
      INSERT INTO Category VALUES ( 'lots of data', businesses );
    END;
    

    クエリ3

    SELECT name, CARDINALITY( businesses )
    FROM   Category
    

    結果

    |         NAME | CARDINALITY(BUSINESSES) |
    |--------------|-------------------------|
    | lots of data |                   10000 |
    |   Restaurant |                       2 |
    



    1. MariaDBで数値を通貨としてフォーマットする

    2. 更新または挿入時に、関連する参照行のタイムスタンプを更新します

    3. エラー:'フィールドリスト'MySQLエラーの不明な列''

    4. php mySQL group concat and group by