5

私はテーブルdonor_masterを持っています:

create table donor_master  
(  
donor_id number(10) primary key not null,  
dob date not null,  
age number(3) not null,  
gender char(1) not null,  
blood_group char(3),  
contact_no number(10),  
address varchar(50) not null,  
city varchar(10) not null,  
pin number(10) not null,  
state varchar(10) not null,  
branch_registration_id number(5) references branch_master(branch_id)  
);  

プロシージャ insert_donor_master でテーブルに挿入しようとすると、コンパイル時に「十分な値がありません」というエラーが発生します。

これは手順です:

create or replace procedure insert_donor_master(  
vdob donor_master.dob%type,  
vage donor_master.age%type,  
vgender donor_master.gender%type,  
vblood_group donor_master.blood_group%type,  
vcontact_no donor_master.contact_no%type,  
vaddress donor_master.address%type,  
vcity donor_master.city%type,  
vpin donor_master.pin%type,  
vstate donor_master.state%type,  
vbranch_registration_id donor_master.branch_registration_id%type  
)  
is  

begin  

    insert into donor_master values (sq_donor_master.nextval, vdob, vage, vgender, vblood_group, vcontact_no, vaddress, vcity, vpin, vstate, vbranch_registration_id);  
    commit;  

end;

何が問題ですか?

ありがとう。

4

1 に答える 1

4

テーブル内のすべての列に値を持たない INSERT ステートメントを指定すると、Oracle は ORA-00947 をスローします。

ここで、投稿した CREATE TABLE ステートメントは、11 列のテーブルを示しています。また、投稿したストアド プロシージャ コードは、VALUES (...) 句に 11 個の値を持つ挿入ステートメントを示しています。

したがって、説明は次のとおりです。

  1. 構成管理の問題があり、間違ったバージョンのストアド プロシージャまたは間違ったバージョンのテーブルを実行している
  2. 構成管理の問題があり、テーブルの実際の構造が思ったものと異なる (CREATE TABLE スクリプトと一致しない)
  3. 実際にはORA-00947エラーが発生していません

すべての行に入力したくない場合は、VALUES 句の前に関連する列の射影を指定できることに注意してください。たとえば、必須列にデータを入力したいだけの場合は、次のようにコーディングします。

insert into  donor_master 
    (donor_id, dob, age, gender, address, city, pin, state )
   values (sq_donor_master.nextval, vdob, vage, vgender, vaddress, vcity, vpin, vstate) 

重要なのは、値の数が列の数と一致することだけです。

INSERT ステートメントの完全な構文は、ドキュメントにあります。 ここにリンクの説明を入力してください 詳細をご覧ください。

于 2012-10-19T09:57:58.180 に答える