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

varray列の2番目の要素にアクセスする

    行1と2を選択してから、不要な先行行を除外する方法を検討する必要があります。1つの方法は、CASEで集計を使用することです。 2行目のみに一致するステートメント:

    SQLフィドル

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

    CREATE TABLE mytable ( myvarraycolumn ) AS
      SELECT SYS.ODCINUMBERLIST( 1, 2, 3 ) FROM DUAL UNION ALL
      SELECT SYS.ODCINUMBERLIST( 4, 5, 6 ) FROM DUAL;
    

    クエリ1

    SELECT (
             SELECT MAX( CASE ROWNUM WHEN 2 THEN COLUMN_VALUE END )
             FROM   TABLE( t.myvarraycolumn )
             WHERE  ROWNUM <= 2
           ) AS second_element
    FROM   mytable t
    

    結果

    | SECOND_ELEMENT |
    |----------------|
    |              2 |
    |              5 |
    

    次の理由で機能していません:相関内部クエリの最初の行の場合、ROWNUM 1です フィルタはWHERE ROWNUM = 2です。 次に、これはWHERE 1=2になります。 フィルタが一致せず、行が破棄されます。次に、後続の行がROWNUMに対してテストされます。 1の (前の行は出力に含まれず、行番号がないため)、これもテストに失敗し、破棄されます。繰り返して、悪意を持って、すべての行がWHEREに失敗します フィルタして破棄されます。




    1. SQL Server SELECTLASTN行

    2. save()とトランザクションのロールバックを休止状態にする

    3. C#を使用してローカルSQLServerデータベースに接続する

    4. ORDER BYなしでMySQLテーブルの自然な順序を逆にしますか?