oracle ORA-00984 列不允许在 PL/SQL 过程中出现
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19991595/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-19 02:05:15 来源:igfitidea点击:
ORA-00984 column not allowed here in PL/SQL procedure
提问by user2994447
create or replace procedure pro_enroll(sname_in IN varchar, cname_in IN varchar)
as
sno STUDENT.snum%type;
begin
SELECT snum INTO sno FROM STUDENT WHERE sname=sname_in;
--dbms_output.put_line(sno || chr(9) || sname_in || chr(9) || cname_in);
INSERT INTO ENROLLED(snum, cname) VALUES(sno, c_name_in);
end pro_enroll;
/
SELECT * FROM ENROLLED;
begin
pro_enroll('M.Lee', 'CS448');
pro_enroll('A.Smith', 'ENG320');
end;
/
SELECT * FROM ENROLLED;
Why am I getting "ORA-00984 column not allowed here"? In ENROLLED:
为什么我会收到“此处不允许使用 ORA-00984 列”?在注册:
CREATE TABLE ENROLLED
(
snum INTEGER NOT NULL,
cname VARCHAR(30) NOT NULL,
PRIMARY KEY (snum, cname),
FOREIGN KEY (snum) REFERENCES STUDENT(snum),
FOREIGN KEY (cname) REFERENCES CLASS(cname)
);
回答by Przemyslaw Kruglej
You have used c_name_in
name of argument in your INSERT
, however, the actual name of the parameter of your procedure is cname_in
, without the _
sign between c
and name
, this works:
您在您的 中使用c_name_in
了参数名称INSERT
,但是,您的过程参数的实际名称是cname_in
,_
在c
和之间没有符号name
,这是有效的:
create or replace procedure pro_enroll(sname_in IN varchar, cname_in IN varchar)
as
sno STUDENT.snum%type;
begin
SELECT snum INTO sno FROM STUDENT WHERE sname=sname_in;
--dbms_output.put_line(sno || chr(9) || sname_in || chr(9) || cname_in);
INSERT INTO ENROLLED(snum, cname) VALUES(sno, cname_in);
end pro_enroll;
/