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

sqloracleplsqlsyntax-error

提问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_inname of argument in your INSERT, however, the actual name of the parameter of your procedure is cname_in, without the _sign between cand 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;
/