CREATE OR REPLACE PROCEDURE INSEMP 
(
  EMPNOS IN VARCHAR2 
, ENAMES IN VARCHAR2 
, JOBAS IN VARCHAR2 
, MGRS IN VARCHAR2 
, HIREDATES IN VARCHAR2 
, SALS IN VARCHAR2 
, COMMISSIONS IN VARCHAR2 
, DEPTNOS IN VARCHAR2 
) AS 
BEGIN
  INSERT INTO emp VALUES (EMPNOS,ENAMES,JOBAS,MGRS,HIREDATES,SALS,COMMS,DEPTNOS);
END INSEMP;

Ketika saya menjalankan hal di atas, saya mendapatkan kesalahan: Error(13,67): PL/SQL: ORA-00984: column not allowed here.

Saya tahu ketika kita memasukkan

INSERT INTO EMP VALUES ('DSFD'DSFDFD', ...) 

Kita harus menggunakan tanda kutip tunggal, tetapi bagaimana cara memasukkan nilai melalui parameter?

0
LEARNER OLY ASKING 12 Mei 2021, 11:08

1 menjawab

Jawaban Terbaik

Masalah Anda adalah bahwa Anda memiliki parameter yang disebut COMMISSIONS tetapi dalam pernyataan sisipan Anda, Anda memberikan nilai COMMS.

Juga, pastikan parameter Anda memiliki nama yang berbeda dengan kolom yang Anda coba masukkan; ini adalah (IMO) praktik yang baik di semua kode PL/SQL yang Anda tulis, karena Anda dapat memperoleh hasil yang tidak diharapkan ketika terjadi tabrakan nama.

Ubah pernyataan sisipan Anda untuk menggunakan nama parameter yang tepat (atau, sebagai alternatif, ubah nama parameter agar sesuai dengan pernyataan sisipan Anda) dan itu akan mulai berfungsi.

Namun, satu hal: adalah praktik yang buruk untuk tidak mencantumkan kolom yang Anda masukkan. Dalam kode produksi nyata, jika seseorang menambahkan kolom ke tabel, kode Anda akan rusak.

Pernyataan sisipan Anda akan lebih baik ditulis sebagai:

insert into <table> (<list of columns to be inserted into>)
values (<list of values to insert into those columns>);
0
Boneist 12 Mei 2021, 08:19