特定の条件に基づいて、Sybase ASE データサーバーでパスワードのリセットを実行する必要があります。
if validations_here
begin
exec sp_password 'sso_passw', 'new_passw', @userid
end
sp_password
10316 - "提供された新しいパスワードは以前のパスワードと同じです"などのエラーが発生する可能性があります。ドキュメンテーションは見つかりませんでしたが、致命的なエラーではなく、 でエミュレートできるはずだと思いますraiserror
。
呼び出し側はその方が扱いやすいので、エラーコードを取得して結果セットの一部として返したいので、@@error を SELECT することを考えました。私のコードは次のとおりです(問題に関連すると思われる部分のみを転写しました):
create procedure sp_desbloc_blanqueo_usr
@userid sysname,
@sso_pass varchar(20),
@new_pass varchar(20)
as
begin
declare @ret_code int
declare @ret_msg varchar(100)
declare @myerror int
select @ret_code = 0, @ret_msg = 'OK'
exec sp_password @sso_pass, @new_pass, @userid
set @myerror = @@error
if @myerror <> 0
begin
select @ret_code = @myerror, @ret_msg = 'Error occurred changing password'
-- It would be nice to have the actual error message as well
goto fin
end
fin:
select @ret_code as ret_code, @ret_msg as ret_msg
end
ただし、ストアド プロシージャを実行するたびに、0 asret_code
と OK asを取得しret_msg
ます (パラメーター tosp_password
が間違っていても)。
sp_password
ストアド プロシージャからのエラー コードを「キャッチ」するにはどうすればよいですか?