Saya ingin membuat variabel array dalam memori yang dapat digunakan dalam kode PL / SQL saya. Saya tidak dapat menemukan koleksi di Oracle PL / SQL yang menggunakan memori murni, semuanya tampaknya terkait dengan tabel. Saya ingin melakukan sesuatu seperti ini di PL / SQL (sintaks C #) saya:
string[] arrayvalues = new string[3] {"Matt", "Joanne", "Robert"};
Sunting: Oracle: 9i
Jawaban:
Anda dapat menggunakan VARRAY untuk array ukuran tetap:
Atau TABEL untuk larik tak terbatas:
Kata "tabel" di sini tidak ada hubungannya dengan tabel database, membingungkan. Kedua metode membuat array dalam memori.
Dengan salah satu dari ini, Anda perlu menginisialisasi dan memperluas koleksi sebelum menambahkan elemen:
Indeks pertama adalah 1 bukan 0.
sumber
my_array(0) := 'some string';
array.extend();
apakah EXTEND menambahkan slot ke array terikat reguler? Dalam hal ini, ukurannya sudah dinamis sehingga sebuah tabel (array tidak terikat) tidak diperlukan.varray(3)
4 kali - Anda mendapatkan kesalahan "subskrip di luar batas".array.extend()
. Setiap tempat saya melihat tidak menunjukkan ini dan itu adalah bagian paling penting untuk dapat menambahkan lebih dari satu item (dari pemahaman saya tentang hal itu, masih baru untuk array dalam SQL).Anda bisa mendeklarasikan DBMS_SQL.VARCHAR2_TABLE untuk menahan array panjang variabel di dalam memori yang diindeks oleh BINARY_INTEGER:
Anda bisa menggunakan array asosiatif (dulu disebut tabel PL / SQL) karena array dalam memori.
Array asosiatif dapat menampung jenis rekaman apa pun.
Semoga ini bisa membantu, Ollie.
sumber
VALUE_ERROR
ketika koleksi kosong. Saya akan menyarankan untuk menggunakanFOR i IN 1 .. employee_array.COUNT
dalam kasus inisys.odcivarchar2list
bawah ini memiliki keuntungan, bahwa Anda juga memiliki konstruktor, misalnya untuk inisialisasi fungsi param standar:sys.odcivarchar2list('val1','val2')
Solusi lain adalah dengan menggunakan Oracle Collection sebagai Hashmap:
sumber
Anda juga dapat menggunakan
oracle defined collection
Saya akan menggunakan array dalam memori. Tetapi dengan
.COUNT
perbaikan yang disarankan oleh uziberia:Solusi lain adalah dengan menggunakan Hashmap seperti @Jchomel lakukan di sini .
NB:
Dengan Oracle 12c Anda bahkan dapat meminta array langsung sekarang !
sumber
Contoh program sebagai berikut dan disediakan di tautan juga https://oracle-concepts-learning.blogspot.com/
tabel plsql atau larik terkait.
sumber