Колонка ORA-00984 здесь не допускается - PullRequest
1 голос
/ 02 июня 2011

Я получаю сообщение об ошибке «Выполнить-984 ORA-00984: столбец здесь не разрешен», когда я вставляю значения в свою таблицу Registred_Customer, используя Pro * C

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 *;и sex это char rest как int;

Он сообщает об ошибке при использовании переменной, но отлично работает с использованием прямых значений, таких как EXEC SQL INSERT INTO REGISTRED_CUSTOMER VALUES (10, 'Pankaj', 23, 'M', 'asdfs', 45875);

Я попытался изменить несколько строк, но безрезультатно.

Заранее спасибо.

Ответы [ 4 ]

5 голосов
/ 02 июня 2011

В вашем коде Pro * C в основном отсутствуют двоеточия (при условии, что ваши формальные параметры называются cust_id, 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);
1 голос
/ 02 июня 2011

Как уже упоминалось, вы пытаетесь использовать столбцы в качестве входных значений.Когда вы предоставляете фактические значения, это работает.Возможно, вы хотите использовать переменные 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);

Но если вы вставляете во все столбцы, вы можете опустить определение столбца и просто указать значения

1 голос
/ 02 июня 2011

Если я вижу, что вы пытаетесь вставить в столбцы столбцы, столбцы ??

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

было бы более полезно, если бы вы опубликовали свою процедуру завершенной.

С уважением

0 голосов
/ 23 февраля 2014

Я также получил это сообщение об ошибке в хранимой процедуре, выполняющей вставку.Я неправильно написал имя параметра в предложении значений, и интерпретатор оракула увидел имя с ошибкой в ​​качестве имени столбца и выдал 00984.

...