[英]exception is not raised in stored procedure
當以下代碼正在運行時,數據庫服務器不會自動引發異常語句,當輸入錯誤的userid
值或該值為null
,它會發生,我不想使用RAISE LOGIN_DENIED;
明確地在我的代碼中,那么您怎么看? 我錯過了什么嗎?
CREATE OR REPLACE PROCEDURE user_auth( userid IN st_az.st_name%type , pass OUT st_az.st_pass%type , message OUT varchar2 , err_msg OUT varchar2 ) IS BEGIN message:= 'login is done successfully'; err_msg:= 'Login Denied .. Please Try Again!'; SELECT st_pass INTO pass FROM st_az WHERE st_name = userid ; dbms_output.put_line(message); EXCEPTION WHEN LOGIN_DENIED THEN dbms_output.put_line(err_msg); END user_auth;
如果要在st_az表中查找信息並在沒有此類行時引發錯誤,則需要NO_DATA_FOUND異常
CREATE OR REPLACE PROCEDURE user_auth(
userid IN st_az.st_name%type ,
pass OUT st_az.st_pass%type ,
message OUT varchar2 ,
err_msg OUT varchar2 ) IS
BEGIN
message:= 'login is done successfully';
err_msg:= 'Login Denied .. Please Try Again!';
SELECT st_pass INTO pass FROM st_az WHERE st_name = userid ;
dbms_output.put_line(message);
EXCEPTION
WHEN NO_DATA_FOUND THEN
dbms_output.put_line(err_msg);
END user_auth;
您問題的原始代碼需要進行一些修改。 對應於OUT形式參數的實際參數必須是變量。 它不能是常量或表達式。
現在,如果您不想使用LOGIN_DENIED
則可以嘗試在異常塊中使用NO_DATA_FOUND
或簡單的通用OTHERS
。 代碼可能是這樣的-
CREATE OR REPLACE
PROCEDURE user_auth(
userid IN st_az.st_name%type ,
pass OUT st_az.st_pass%type ,
MESSAGE OUT VARCHAR2 ,
err_msg OUT VARCHAR2 )
AS
message1 VARCHAR2(50);
err_message1 VARCHAR2(50);
BEGIN
message1 := 'login is done successfully';
err_message1:= 'Login Denied .. Please Try Again!';
SELECT st_pass INTO pass FROM st_az WHERE st_name = userid ;
MESSAGE:= message1;
dbms_output.put_line(MESSAGE);
EXCEPTION
WHEN OTHERS THEN
err_msg:= err_message1;
dbms_output.put_line(err_msg);
END user_auth;
現在測試上面的代碼:-
create table st_az(st_name varchar2(10),st_pass varchar2(10));
insert into st_az values ('aa','aa');
insert into st_az values ('bb','bb');
commit;
創建匿名阻止和調用過程:-
DECLARE
MESSAGE VARCHAR2(50);
err_msg VARCHAR2(50);
pass VARCHAR2(10);
BEGIN
user_auth('cc',pass,MESSAGE,err_msg);
END;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.