2013-11-22 197 views
0
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 

回答

1

無需引號的:

select * into row from employee where EMPLASTNAME=pEMPLASTNAME; 

但是,您可能沒有該變量值的任何數據呢(即有一天,它可能發生) 這就是爲什麼我建議你發現異常並予以處理(見EXCEPTION區塊)

pd:不使用保留字如row是一種好習慣。我建議你以另一種方式命名變量。

+0

謝謝,但現在我得到這個錯誤: - –

+0

ORA-01422:精確獲取回報更多比要求的行數 –

+0

@Nidhin_toms,這意味着不止一名員工的姓氏像'Mark'。這個pl/sql塊只允許返回一行。 – Sebas

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

非常感謝您的輸入Armunin! –