是否可以创建用户定义的异常并能够更改SQLERRM?Oracle PL/SQL - 通过自定义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!");
}
对不起,如果我不清楚。我会再添加一个例子。 – tgxiii 2011-05-16 16:50:15