【问题标题】:ORA-00984 column not allowed here in PL/SQL procedureORA-00984 在 PL/SQL 过程中不允许列
【发布时间】:2013-11-15 13:04:41
【问题描述】:
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;

为什么我会收到“ORA-00984 column not allowed here”? 在已注册:

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) 
);

【问题讨论】:

    标签: sql oracle plsql syntax-error


    【解决方案1】:

    您在INSERT 中使用了c_name_in 参数名称,但是,您的过程参数的实际名称是cname_in,在cname 之间没有_ 符号,这作品:

    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;
    /
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多