此处不允许使用ORA-00984列



我收到错误"Execute-984 ORA-00984:此处不允许有列"当我使用Pro*C 在表Registerd_Customer中插入值时

Registerd_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是char rest作为int;

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

我试着改了几行,但都没用。

提前谢谢。

您的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);

如果我认为你试图插入到列中是正确的,那么列??

"将SQL插入REGISTRED_CUSTOMER值(客户id、客户名称、年龄、性别、地址、联系人);"??

如果你把你的程序完整地公布出来会更有帮助。

问候

正如Mr.所提到的,您正在尝试使用列作为输入值。当您提供实际值时,它会起作用。您是否打算使用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);

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

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

相关内容

  • 没有找到相关文章

最新更新