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

Buffer string karakter kesalahan terlalu kecil di Oracle Stored Procedure

Demo sederhana dari skenario yang disebutkan dalam komentar:

create or replace procedure p42(out_message out varchar2) as
begin
  out_message := 'Test message';
end p42;
/

Jika saya menyebutnya dengan variabel yang dideklarasikan cukup besar, tidak apa-apa. Saya memiliki variabel 12-char, jadi menetapkan nilai 12-char tidak menjadi masalah:

declare
  msg varchar2(12);
begin
  p42(msg);
end;
/

anonymous block completed

Tetapi jika saya membuat kesalahan dan membuat variabel pemanggil terlalu kecil, saya mendapatkan kesalahan yang Anda lihat:

declare
  msg varchar2(10);
begin
  p42(msg);
end;
/

Error report:
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
ORA-06512: at "STACKOVERFLOW.P42", line 3
ORA-06512: at line 4
06502. 00000 -  "PL/SQL: numeric or value error%s"
*Cause:    
*Action:

Tumpukan kesalahan menunjukkan baris dalam prosedur yang membuat kesalahan (baris 3), dan baris di pemanggil yang memicunya (baris 4). Tergantung di mana Anda menyebutnya, Anda mungkin tidak memiliki seluruh tumpukan, tentu saja.

Anda menyebutkan bahwa akan ada berbagai pesan kesalahan di masa mendatang. Anda perlu memastikan bahwa apa pun yang pernah memanggil ini mendefinisikan variabel menjadi cukup besar untuk mengatasi salah satu pesan Anda. Jika disimpan dalam tabel, Anda dapat mengotomatiskannya secara semi-otomatis, jika tidak, ini akan menjadi pemeriksaan tinjauan kode manual.

Oke, lihat komentar c# Anda setelah memposting ini. Sepertinya Anda memanggil konstruktor ini ; itu tidak mengatakan berapa ukuran default yang didapat, tetapi tidak masuk akal untuk berpikir itu mungkin 1. Jadi, Anda perlu memanggil konstruktor ini sebagai gantinya untuk menentukan ukuran secara eksplisit:

... sesuatu seperti:

OracleParameter prm15 = new OracleParameter("out_str_message",
    OracleDbType.Varchar2, 80);

Kecuali ada cara untuk mengatur ulang ukuran setelah pembuatan, yang tidak dapat saya lihat. (Bukan sesuatu yang pernah saya gunakan!).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Perbandingan Penyedia Oracle .NET Pihak Ketiga

  2. pragma otonom_transaksi dalam pemicu

  3. sql - Oracle - memilih catatan pertama dan terakhir untuk grup/sku tertentu

  4. Pola desain terbaik untuk menutup koneksi database saat terjadi pengecualian

  5. SQL Memilih nilai MIN dari data baris dengan nilai nol