1

Pro*C を使用してテーブル Registred_Customer に値を挿入しているときに、「Execute-984 ORA-00984: column not allowed here」というエラーが表示されます。

Registered_Customer は次のように定義されます。

CREATE TABLE Registred_Customer (
    Cust_id NUMBER(6) PRIMARY KEY,
    Name VARCHAR2(20) NOT NULL,
    Age NUMBER,
    Sex CHAR,
    Addr VARCHAR2(50),
    Contact NUMBER(10)
);

pro*c メソッドを使用した値の挿入

addCustomer(i, name,age, gender, address,contectNo);

Pro*C メソッドでは、次のコードを使用して挿入します

EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES  
(cust_id, cust_name, age, sex, addr,   contact);

ここで cust_name と addr は char *; です。sex は int としての char 残りです。

変数の使用中にエラーが報告されますが、次のような直接値を使用すると正常に機能しますEXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES (10, 'Pankaj', 23, 'M', 'asdfs', 45875);

いくつかの行を変更しようとしましたが、無駄でした。

前もって感謝します。

4

4 に答える 4

5

cust_idPro*C コードには基本的にコロンがありません (仮パラメータが、などcust_nameと呼ばれていると仮定しますage):

EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES  
    (:cust_id, :cust_name, :age, :sex, :addr, :contact);

また、列名を明示的に指定する方がより堅牢です。そうしないと、テーブル スキーマを変更すると、見つけにくいバグが発生する可能性があります。

EXEC SQL INSERT INTO REGISTRED_CUSTOMER (Cust_Id, Name, Ag, Sex, Addr, Contact)
    VALUES (:cust_id, :cust_name, :age, :sex, :addr, :contact);
于 2011-06-02T15:17:19.893 に答える
1

正しく表示されている場合は、列に挿入しようとしていますか?

"EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES(cust_id、cust_name、age、sex、addr、contact);" ??

手順を完了して投稿すると、さらに役立ちます。

よろしく

于 2011-06-02T15:09:15.507 に答える
1

氏が述べたように、あなたは入力値として列を使用しようとしています。実際の値を指定すると機能します。PL / SQL変数またはプロシージャ引数を使用するつもりですか?この場合、プロシージャパラメータが呼び出されると、値セクションに入力する必要があります。

つまり、addCustomerが次のようになっている場合

PROCEDURE addCustomer (pId NUMBER, pName VARCHAR2, pAge NUMBER, pGender CHAR, pAddress VARCHAR2, pContact NUMBER)

次に、次のようなことをします

INSERT INTO registered_customer (cust_id, name, age, sex, addr, contact) VALUES (pId, pName, pAge, pGender, pAddress, pContact);

ただし、すべての列に挿入する場合は、列の定義を省略して、値を指定するだけで済みます。

于 2011-06-02T15:09:49.140 に答える
0

挿入を行うストアド プロシージャでもこのエラー メッセージが表示されました。values 句のパラメーター名のスペルを間違えたので、Oracle インタープリターはスペルの間違った名前を列名として認識し、00984 を発行しました。

于 2014-02-22T21:10:19.473 に答える