1

当我使用 Pro*C 在我的表 Registred_Customer 中插入值时,出现错误“Execute-984 ORA-00984: column not allowed here”

Registred_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 *; 和性别是 char rest as int;

它在使用变量时报告错误,但使用直接值如EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES (10, 'Pankaj', 23, 'M', 'asdfs', 45875);

我尝试更改几行但徒劳无功。

提前致谢。

4

4 回答 4

5

您的 Pro*C 代码基本上缺少冒号(假设您的形式参数称为cust_id,cust_nameage):

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 回答