[英]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.