这里不允许使用ORA-00984专栏

时间:2011-06-02 15:04:52

标签: sql oracle insert oracle-pro-c ora-00984

我收到错误 “执行-984 ORA-00984:这里不允许列” 我正在使用Pro * C

在我的表Registred_Customer中插入值

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 *;和性是作为int的休息;

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

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

提前致谢。

4 个答案:

答案 0 :(得分:5)

您的Pro * C代码基本上缺少冒号(假设您的形式参数被称为cust_idcust_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);

答案 1 :(得分:1)

如果我看到正确的你试图插入列,列?

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

如果您完成过程,那将会更有帮助。

此致

答案 2 :(得分: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);

但是如果要插入所有列,则可以省略列定义并只提供值

答案 3 :(得分:0)

我还在执行插入的存储过程中收到此错误消息。我在values子句中拼错了参数名称,oracle解释器将拼写错误的名称视为列名并发出了00984.