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

初期化されていないコレクションPL/SQLへの参照

    テスト手順には、vがあります。 OUTパラメータとして宣言されています-これは、プロシージャがプロシージャ内の出力コレクションを初期化する必要があることを意味します(例:v := T(); )。 u_tを初期化するために呼び出しブロックを変更した場合でも u_tのように、これは役に立ちません コレクションはプロシージャに渡されません。プロシージャが渡したものだけを受け取ります。

    次のようにコードを変更します。

    CREATE OR REPLACE PROCEDURE TEST ( u IN T, v OUT T) IS
      i NUMBER := u.FIRST;
    BEGIN
      v := T();
      v.EXTEND(u.COUNT);
    
      IF i IS NOT NULL THEN
        LOOP
          v(i) := u(i);
          i := u.NEXT(i);
          EXIT WHEN i IS NULL;
        END LOOP;
      END IF;
    END TEST;
    
    DECLARE
      v_t T;
      u_t T;
    BEGIN
      v_t := T();
      v_t.EXTEND(2);
    
      v_t(1) := 'This is test1';
      v_t(2) := 'This is test2';
    
      TEST(v_t, u_t);
    
      FOR i IN u_t.FIRST..u_t.LAST LOOP
        DBMS_OUTPUT.PUT_LINE(u_t(i));
      END LOOP;
    END;
    

    PL / SQLの文字列定数は、二重引用符ではなく一重引用符で囲む必要があることに注意してください。

    また、プロシージャと呼び出しブロックで反対の意味を持つ同様の変数名を使用すると、混乱が増します。意味のある名前を使用する習慣を身に付ければ、後で混乱を避けることができます。

    共有してお楽しみください。



    1. InnoSetupを使用してMSSQLServerに接続するにはどうすればよいですか?

    2. 2つのテーブルを組み合わせ、同じレコードを除外します

    3. MySQLサービスの起動時にSQLクエリを実行する

    4. Android用SQLCipherを使い始める方法は?