Столбец ORA-00984 здесь не допускается

Я получаю сообщение об ошибке «Execute-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 *; а секс - char rest как int;

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

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

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


person Nitesh    schedule 02.06.2011    source источник


Ответы (4)


В вашем коде 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);
person Codo    schedule 02.06.2011
comment
+1, особенно за совет явно перечислять имена столбцов. - person DCookie; 02.06.2011
comment
Я уже пробовал работать с обоими решениями. С двоеточиями указывается неопределенный идентификатор, а со второй частью также ошибка не была решена. - person Nitesh; 03.06.2011

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

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

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

С Уважением

person Hector Sanchez    schedule 02.06.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);

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

person Chris Cameron-Mills    schedule 02.06.2011
comment
Может быть, вы не осознали, что оператор INSERT выполняется в контексте Pro * C? - person Codo; 02.06.2011
comment
@ Chris Cameron-Mills addcustomer не является процедурой. Это метод pro * c, который вызывается другой программой cpp. Так что это не поможет. - person Nitesh; 03.06.2011
comment
Ах, моя ошибка, да, я не признал Pro * C, проблема / объяснение все равно та же, вы используете имена столбцов в разделе ЗНАЧЕНИЯ - person Chris Cameron-Mills; 03.06.2011

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

person giscone    schedule 22.02.2014