3
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 列はここでは許可されていません」というメッセージが表示されるのはなぜですか? 登録済み:

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

1 に答える 1

3

c_name_inで引数の名前を使用しましINSERTたが、プロシージャのパラメータの実際の名前は で、との間に記号があり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;
/
于 2013-11-15T01:06:34.680 に答える