Thursday, December 11, 2025

.::: Troubleshoot oracle PLS-00306: wrong number or types of arguments in call to 'SPBUY' PL/SQL: Statement ignored :::.

Dari gambar error tersebut terlihat jelas penyebabnya:

procedure spbuy(integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer, integer) does not exist

Artinya: FUNCTION atau Stored Procedure spbuy (atau sptaxsample) membutuhkan 15 parameter, tapi saat dipanggil hanya diberikan 14 parameter.

. Tujuan Anda

Anda ingin mensimulasikan kasus tersebut pada database sample oracle dengan database contoh bernama hris.

Saya buatkan contoh struktur database, fungsi, dan pemanggilan yang benar & salah, sehingga error yang sama bisa direplikasi.

. SIMULASI DI oracle: Database hris

1. Buat Database Sample
 
2. Buat Sample Stored Procedure spbuy

Ini sekedar contoh dengan 15 parameter seperti kebutuhan kasus Anda:
CREATE OR REPLACE PROCEDURE spbuy (
    p1  IN NUMBER,
    p2  IN NUMBER,
    p3  IN NUMBER,
    p4  IN NUMBER,
    p5  IN NUMBER,
    p6  IN NUMBER,
    p7  IN NUMBER,
    p8  IN NUMBER,
    p9  IN NUMBER,
    p10 IN NUMBER,
    p11 IN NUMBER,
    p12 IN NUMBER,
    p13 IN NUMBER,
    p14 IN NUMBER,
    p15 IN NUMBER
)
AS
BEGIN
    DBMS_OUTPUT.PUT_LINE('Simulasi spbuy berhasil dipanggil');
END;
/


3. Contoh Kesalahan (pemicu error seperti di screenshot)

Hanya 14 parameter:

SET SERVEROUTPUT ON;
EXEC spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
EXEC spbuy(1,2,3,4,5,6,7,8,9,10,12,13,14);

Expected error di oracle:

SQL> EXEC spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14);
BEGIN spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14); END;

      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'SPBUY'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored


SQL> EXEC spbuy(1,2,3,4,5,6,7,8,9,10,12,13,14);
BEGIN spbuy(1,2,3,4,5,6,7,8,9,10,12,13,14); END;
      *
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'SPBUY'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

SQL>

 


4. Contoh Pemanggilan yang Benar

Dengan 15 parameter lengkap:

SET SERVEROUTPUT ON;

EXEC spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

EXECUTE spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);

BEGIN
    spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
END;
/

SET SERVEROUTPUT OFF;

SQL> SET SERVEROUTPUT ON;
SQL> EXEC spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
Simulasi spbuy berhasil dipanggil

PL/SQL procedure successfully completed.

SQL> EXECUTE spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
Simulasi spbuy berhasil dipanggil

PL/SQL procedure successfully completed.

SQL> BEGIN
    spbuy(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
END;
/  2    3    4
Simulasi spbuy berhasil dipanggil

PL/SQL procedure successfully completed.

SQL> SET SERVEROUTPUT OFF;
SQL>
 


5. Rekomendasi Solusi untuk Kasus Asli Anda

5.1 Cek jumlah parameter SP di oracle:


select 'SELECT text FROM user_source WHERE name = ''SPBUY'' ORDER BY line;' from dual;
SELECT text FROM user_source WHERE name = 'SPBUY' ORDER BY line;
 


select 'SELECT text FROM all_source WHERE name = ''SPBUY'' ORDER BY line;' from dual;
SELECT text FROM all_source WHERE name = 'SPBUY' ORDER BY line;
 


select 'SELECT text FROM dba_source WHERE name = ''SPBUY'' ORDER BY line;' from dual;
SELECT text FROM dba_source WHERE name = 'SPBUY' ORDER BY line;
 

5.2 Samakan jumlah parameter di aplikasi:

{ call spbuy(?,?,?,?,?,?,?,?,?,?,?,?,?) }

Jika SP/FUNCTION berubah versi (param nambah), aplikasi harus update.

Bila Anda Mau, Saya Bisa:

? Cocokkan SP spbuy Anda yang sebenarnya
? Analisa parameter masing-masing dan mapping dari aplikasi
? Deteksi versi mana yang tidak sinkron (Dev/QA/Prod)
? Generator template call otomatis untuk 13 param

Apakah Anda ingin saya bantu review struktur parameter SP Anda yang asli?
Jika ya, silakan kirim:

No comments:

Post a Comment

Popular Posts