Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Referensi ke koleksi PL/SQL yang tidak diinisialisasi

Dalam prosedur TEST Anda, Anda memiliki v dideklarasikan sebagai parameter OUT - ini berarti bahwa prosedur perlu menginisialisasi kumpulan keluaran dalam prosedur (mis. v := T(); ). Bahkan jika Anda mengubah blok panggilan untuk menginisialisasi u_t ini tidak akan membantu, karena u_t koleksi tidak diteruskan ke prosedur - hanya menerima apa yang dikembalikan oleh prosedur.

Ubah kode Anda sebagai berikut:

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;

Harap dicatat bahwa konstanta string dalam PL/SQL harus diapit oleh tanda kutip tunggal, bukan tanda kutip ganda.

Juga - menggunakan nama variabel serupa yang memiliki arti berlawanan dalam prosedur dan blok panggilan hanya menambah kebingungan. Biasakan menggunakan nama yang bermakna dan Anda akan terhindar dari banyak kebingungan nantinya.

Bagikan dan nikmati.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara menggabungkan teks dari beberapa baris menjadi satu string teks di server Oracle?

  2. Tangkap nilai yang memicu DUP_VAL_ON_INDEX

  3. SQL untuk menemukan kata-kata huruf besar dari kolom

  4. cara mengubah tanggal ke waktu di oracle 10g

  5. Oracle - Mengapa nol di depan angka hilang saat mengonversinya TO_CHAR