要确定当前运行的过程或函数的名称,可以使用以下两个系统变量:
::CURRENT_OBJECT_NAME返回当前过程或函数的名称::CURRENT_OBJECT_SCHEMA返回当前过程或函数的模式的名称。
两者都返回 NVARCHAR(256) 类型的字符串。
以下示例说明了系统变量的用法。
CREATE FUNCTION RETURN_NAME ()
RETURNS name nvarchar(256),
schema_name nvarchar(256)
AS
BEGIN
name = ::CURRENT_OBJECT_NAME;
schema_name = ::CURRENT_OBJECT_SCHEMA;
END;
例如,通过调用该函数。
SELECT RETURN_NAME().schema_name, RETURN_NAME().name from dummy然后,该函数的结果是 函数的名称和 schema_name:
SCHEMA_NAME NAME
----------------------------------------
MY_SCHEMA RETURN_NAME
下一个示例显示,也可以将两个系统变量作为参数传递给过程或函数调用。
CREATE FUNCTION GET_FULL_QUALIFIED_NAME (schema_name nvarchar(256),name nvarchar(256))
RETURNS fullname nvarchar(256)
AS
BEGIN
fullname = schema_name || '.' || name ;
END;
CREATE PROCEDURE MAIN_PROC (IN INPUT_VALUE INTEGER)
AS
BEGIN
DECLARE full_qualified_name NVARCHAR(256);
DECLARE error_text NVARCHAR(256);
full_qualified_name = get_full_qualified_name (::CURRENT_OBJECT_SCHEMA,
::CURRENT_OBJECT_NAME);
IF :input_value > 1 OR :input_value < 0 THEN
SIGNAL SQL_ERROR_CODE 10000 SET MESSAGE_TEXT = 'ERROR IN '
|| :full_qualified_name || ': invalid input value ';
END IF;
END;
备注请注意,在匿名块中,两个系统变量的值均为 NULL。
两个系统变量将始终返回模式名称,以及过程或函数的名称。在过程或函数之上创建同义词并使用同义词调用它仍会返回原始名称,如下一示例所示。
我们在上面的 RETURN_NAME 函数上创建同义词,并将使用同义词对其进行查询:
CREATE SYNONYM SYN_FOR_FUNCTION FOR RETURN_NAME;
SELECT SYNONYM_FOR_FUNCTION().schema_name, SYNONYM_FOR_FUNCTION().name FROM dummy;
结果如下:
SCHEMA_NAME NAME
MY_SCHEMA RETURN_NAME