2014-04-25 234 views
0

這是我的存儲過程compliation錯誤,執行錯誤

create or replace procedure EMP_DB.std_stdsp 
(stid in out varchar(10), 
name in out varchar(100) 
) 
is 
begin 
select *from students s 
where S.STDID in(stid) 
and S.STDNME in (name); 
end EMP_DB.std_stdsp; 
/

編譯錯誤

警告:編譯但編譯錯誤

當我執行存儲過程,我出現錯誤

EXEC EMP_DB.std_stdsp('1','Farhat'); 

錯誤

BEGIN EMP_DB.std_stdsp('1','Farhat'); END; 
Error at line 1 
ORA-06550: line 1, column 14: 
PLS-00905: object EMP_DB.STD_STDSP is invalid 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

提前

+0

您可以在'create'語句後立即執行'show errors';或者稍後查詢'user_errors'視圖。要麼會向您顯示實際的編譯錯誤,後者會顯示所有當前無效的對象,因此如果您需要篩選很多內容,則可以過濾對象類型和名稱。 –

回答

1

任何一個可以幫助me.Thanks它看起來像你想獲得多個記錄從選擇回來。要處理多個記錄,您需要一個循環。下面應該編譯(對不起,沒有測試)

create or replace procedure EMP_DB.std_stdsp ( 
    stid in out varchar(10), 
    name in out varchar(100)) is 
begin 
    for rec in (select * 
       from students s 
       where S.STDID in(stid) 
        and S.STDNME in (name)) loop 
    dbms_output.put_line ('student record'); 
    -- replace the dbms_output and this comment with some meaningful code 
    -- any code inside the loop will execute once for each student record 
    -- returned from the select statement 
    end loop; 
end EMP_DB.std_stdsp; 
/

第二個錯誤只是因爲你的程序沒有編譯。

是否有意將'1,3,5'之類的內容傳遞給stid參數以獲取記錄1,3和5.如果是這種情況,則不會按預期工作。英寸將採取整個'1,3,5'作爲一個單一的價值。要匹配表中的記錄,stdid列必須完全爲'1,2,3'。如果要獲取多條記錄,可以將其切換爲使用like而不是in。不過你必須添加一些通配符。