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

Nit*_*esh 1 sql oracle insert ora-00984 oracle-pro-c

我正在使用Pro*C在我的表Registred_Customer中插入值时出现错误"Execute-984 ORA-00984:此处不允许列"

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)
);
Run Code Online (Sandbox Code Playgroud)

使用pro*c方法插入值

addCustomer(i, name,age, gender, address,contectNo);
Run Code Online (Sandbox Code Playgroud)

在Pro*C方法中我使用以下代码插入

EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES  
(cust_id, cust_name, age, sex, addr,   contact);
Run Code Online (Sandbox Code Playgroud)

这里的cust_name和addr是char*; 和性是作为int的char rest;

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

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

提前致谢.

Cod*_*odo 5

你的PRO*C代码基本上缺少冒号(假设你的形式参数,称为cust_id,cust_name,age等):

EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES  
    (:cust_id, :cust_name, :age, :sex, :addr, :contact);
Run Code Online (Sandbox Code Playgroud)

并且显式指定列名称会更健壮.否则,对表模式的更改可能导致很难找到错误:

EXEC SQL INSERT INTO REGISTRED_CUSTOMER (Cust_Id, Name, Ag, Sex, Addr, Contact)
    VALUES (:cust_id, :cust_name, :age, :sex, :addr, :contact);
Run Code Online (Sandbox Code Playgroud)

  • +1,特别是对于明确列出列名的建议. (2认同)