사용자 정의 예외를 생성하고 SQLERRM을 변경할 수 있습니까?
예를 들면 :
DECLARE
ex_custom EXCEPTION;
BEGIN
RAISE ex_custom;
EXCEPTION
WHEN ex_custom THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/
출력은 "사용자 정의 예외"입니다. 그 메시지를 변경할 수 있습니까?
편집 : 여기에 더 자세한 내용이 있습니다.
나는 이것이 내가 더 잘하려고하는 것을 보여주기를 바랍니다.
DECLARE
l_table_status VARCHAR2(8);
l_index_status VARCHAR2(8);
l_table_name VARCHAR2(30) := 'TEST';
l_index_name VARCHAR2(30) := 'IDX_TEST';
ex_no_metadata EXCEPTION;
BEGIN
BEGIN
SELECT STATUS
INTO l_table_status
FROM USER_TABLES
WHERE TABLE_NAME = l_table_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- raise exception here with message saying
-- "Table metadata does not exist."
RAISE ex_no_metadata;
END;
BEGIN
SELECT STATUS
INTO l_index_status
FROM USER_INDEXES
WHERE INDEX_NAME = l_index_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
-- raise exception here with message saying
-- "Index metadata does not exist."
RAISE ex_no_metadata;
END;
EXCEPTION
WHEN ex_no_metadata THEN
DBMS_OUTPUT.PUT_LINE('Exception will be handled by handle_no_metadata_exception(SQLERRM) procedure here.');
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/
실제로 이러한 하위 블록이 수십 개 있습니다. 각 하위 블록에 대해 단일 사용자 정의 예외를 발생시키는 방법이 있는지 궁금하지만 각 하위 블록에 대해 별도의 사용자 정의 예외를 생성하는 대신 다른 메시지를 제공하도록합니다.
.NET에서는 다음과 같은 사용자 지정 예외가있는 것과 같습니다.
public class ColorException : Exception
{
public ColorException(string message)
: base(message)
{
}
}
그리고 메서드는 다음과 같습니다.
if (isRed)
{
throw new ColorException("Red is not allowed!");
}
if (isBlack)
{
throw new ColorException("Black is not allowed!");
}
if (isBlue)
{
throw new ColorException("Blue is not allowed!");
}