Masukan Anda gagal dengan kesalahan sintaks di Konstruktor ARRAY bahkan sebelum Anda mencapai resolusi jenis fungsi - di mana Anda akan mendapatkan lebih banyak pesan kesalahan karena ketidakcocokan jenis lain setelah Anda menghapus konstruktor ARRAY yang seharusnya tidak ada dalam panggilan sama sekali.
Solusi Anda adalah meneruskan parameter terpisah dari jenis pencocokan , tidak sebuah array. Selebihnya hanyalah penjelasan dari apa yang kita lihat.
Apa yang sebenarnya terjadi
Array hanya dapat menyertakan nilai dari jenis yang sama, tetapi input Anda menggabungkan konstanta numerik dengan literal string non-numerik , yang tidak dapat diselesaikan.
Jika Anda ingin menyelesaikannya menjadi text[]
(array text
), Anda harus memberikan literal string seperti:
SELECT ARRAY['1004', '2', '1079412', 'WwLEA6XZ0'];
Atau array literal secara langsung, seperti:
SELECT '{1004, 2, 1079412, WwLEA6XZ0}'::text[];
Tetapi begitu Anda memulai konstruktor ARRAY dengan konstanta numerik, hanya tipe numerik yang sah untuk ditambahkan. Atau setidaknya string literal dengan konten yang dapat dipaksa ke tipe yang sama. Anda bisa :
SELECT ARRAY[1004, 2, 1079412, '1'];
... menghasilkan int[]
. Atau:
SELECT ARRAY[1004, 2, 1079412, 1.0];
Atau bahkan:
SELECT ARRAY[1004, 2, 1079412.0, '1.0'];
... keduanya menghasilkan numeric[]
.
Tapi adalah ilegal dan memang seharusnya demikian.ARRAY[1004, 2, 1079412, 'WwLEA6XZ0V']
Aturan pasti resolusi tipe untuk konstruktor array dapat ditemukan di bab manual ini:"Konversi Jenis" - "UNION, CASE, dan Konstruksi Terkait" . Perjalanan Anda berakhir pada:
Karena string literal 'WwLEA6XZ0V' tidak dapat dikonversi ke integer
.