通过存储过程显示数据

时间:2013-11-22 02:55:04

标签: sql oracle select stored-procedures

Create or replace procedure disp(pEMPLASTNAME varchar2)
IS
Row employee%rowtype;
begin
select * into row from employee where EMPLASTNAME=’pEMPLASTNAME’ ;
dbms_output.put_line('Name: '||Row.EMPID||' '|| Row.EMPNAME);
End;
/

BEGIN
disp(‘Mark’);
END;
/

您好,我正在尝试使用存储过程显示表中的数据。姓氏作为参数通过存储过程传递,执行时,存储过程应显示所有具有姓氏的行。这是我得到的错误;请帮忙! : -

SQL> BEGIN
disp('Mark');
END;
/
BEGIN
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at "TEST.DISP", line 5
ORA-06512: at line 2

2 个答案:

答案 0 :(得分:1)

无需引号:

select * into row from employee where EMPLASTNAME=pEMPLASTNAME;

但是,您可能无法获得该变量值的任何数据(即有一天,可能会发生) 这就是为什么我建议你抓住异常并对其进行处理(参见EXCEPTION阻止)

pd:不使用row等保留字是一种好习惯。我建议你用另一种方式命名你的变量。

答案 1 :(得分:1)

我建议使用光标选择所有行,然后循环遍历光标以打印结果:

Create or replace procedure disp(pEMPLASTNAME varchar2)
IS
Cursor row_select is
    select EMPID, EMPNAME from employee where emplastname = pEMPLASTNAME;
-- and whatever columns you need to print, using * isn't good practice

begin
for item in row_select loop
    dbms_output.put_line('Name: '||item.EMPID||' '|| item.EMPNAME);
end loop;
End;
/

BEGIN
disp(‘Mark’);
END;
/