我在编写游标/循环时遇到麻烦。我不确定为什么它不起作用

时间:2018-11-28 00:09:51

标签: plsql

我的代码在这里。我不断收到错误的选择语句。我已经创建了一个候补表和一个序列。但是,我将值插入了等待列表。我必须从students表中获取sname,因为waitlist在表中没有sname。我正在尝试显示RankSid,Snum,sname,时间(例如1 pm或2 pm)。

   create or replace procedure getWaiting(
p_callnum waitlist.callnum%type) as

cursor cwaiting is
    select RankingSid, waitlist.snum, students.sname, to_char(time, 'hh AM')time
    from waitlist, students
    where p_callnum=callnum
    and waitlist.snum=students.snum;

begin
For EachStudent in cwaiting loop
insert into TestTable values (EachStudent.RankingSid, Eachstudent.snum, EachStudent.sname, EachStudent.time);

dbms_output.put_line(eachstudent.rankingsid || eachstudent.snum || eachstudent.sname, eachstudent.time);
end loop;
end;
/

2 个答案:

答案 0 :(得分:0)

您的代码中有许多语法错误,最大的错误是您的insert语句,您需要以与dbms_output相同的方式引用用于插入的光标变量。我没有您的表定义来测试代码,但是下面的内容应该非常接近您的需求。

    create or replace procedure getWaiting(
p_callnum waitlist.callnum%type) as

cursor cwaiting is
    select RankingSid, waitlist.snum, students.sname, to_char(time, 'hh AM')time
    from waitlist, students
    where p_callnum=callnum
    and waitlist.snum=students.snum;

begin
For EachStudent in cwaiting loop
insert into TestTable values (EachStudent.RankingSid, Eachstudent.snum, EachStudent.sname, EachStudent.time);

dbms_output.put_line(eachstudent.rankingsid || eachstudent.snum || eachstudent.sname || eachstudent.time);
end loop;
end;
/

答案 1 :(得分:0)

我以另一种方式进行了操作,并且想知道如何进行更改。插入表无法以另一种方式工作。我想知道是否需要创建而不是插入

create or replace procedure getWaiting(
    p_callnum waitlist.callnum%type) as




begin
    For eachRec in (select waitlist.rankingsid, students.snum, students.sname, to_char(time, 'hh:mi:ss AM') RequestedTime
        from students, waitlist
        where p_callnum=callnum
        and students.snum=waitlist.snum
        order by rankingsid)

    Loop
        dbms_output.put_line('Rank Number '|| eachRec.rankingsid ||' Student Name ' ||eachRec.sname ||' Student Number ' || eachRec.snum ||' Wait List Date ' || eachRec.RequestedTime);

    end Loop;


end;
/