指定传递未注册参数的行为
默认情况下,Vertica 会在您向 UDx 传递未注册参数时发出警告消息。未注册参数是指未在 getParameterType()
方法中声明的参数。
可以通过更改 StrictUDxParameterChecking
配置参数来控制 UDx 在您向其传递未注册参数时的行为。
未注册参数行为设置
可以指定 UDx 为响应一个或多个未注册参数而做出的行为。要执行此操作,请将 StrictUDxParameterChecking
配置参数设置为以下值之一:
-
0:允许 UDx 访问未注册参数。
ParamReader
类的getType()
方法决定未注册参数的数据类型。Vertica 不会显示任何警告或错误消息。 -
1(默认值):忽略未注册参数并允许函数运行。Vertica 将显示警告消息。
-
2:返回错误并阻止函数运行。
示例
以下示例演示了可以通过对 StrictUDxParameterChecking
参数使用不同的值来指定的行为。
查看 StrictUDxParameterChecking 的当前值
要查看 StrictUDxParameterChecking
配置参数的当前值,请运行以下查询:
=> \x
Expanded display is on.
=> SELECT * FROM configuration_parameters WHERE parameter_name = 'StrictUDxParameterChecking';
-[ RECORD 1 ]-----------------+------------------------------------------------------------------
node_name | ALL
parameter_name | StrictUDxParameterChecking
current_value | 1
restart_value | 1
database_value | 1
default_value | 1
current_level | DATABASE
restart_level | DATABASE
is_mismatch | f
groups |
allowed_levels | DATABASE
superuser_only | f
change_under_support_guidance | f
change_requires_restart | f
description | Sets the behavior to deal with undeclared UDx function parameters
更改 StrictUDxParameterChecking 的值
可以在数据库级别、节点级别或会话级别更改 StrictUDxParameterChecking
配置参数的值。例如,可以将值更改为“0”,以指定可以向 UDx 传递未注册参数而不显示警告或错误消息:
=> ALTER DATABASE DEFAULT SET StrictUDxParameterChecking = 0;
ALTER DATABASE
RemoveSymbol 的无效参数行为
以下示例演示了如何调用 RemoveSymbol UDSF 示例。RemoveSymbol UDSF 具有一个必需参数 (symbol
) 和一个可选参数 (n
)。在此示例中,未使用可选参数。
如果同时传递 symbol
和一个名为 wrongParam
的附加参数(未在 UDx 中声明此参数),UDx 的行为会根据 StrictUDxParameterChecking
的值相应地更改。
如果将 StrictUDxParameterChecking
设置为“0”,UDx 将正常运行而不显示警告。此外,wrongParam
将变为可供 UDx 访问(通过 ServerInterface
对象的 ParamReader
对象):
=> ALTER DATABASE DEFAULT SET StrictUDxParameterChecking = 0;
ALTER DATABASE
=> SELECT '3re3mo3ve3sy3mb3ol' original_string, RemoveSymbol('3re3mo3ve3sy3mb3ol' USING PARAMETERS symbol='3', wrongParam='x');
original_string | RemoveSymbol
--------------------+-------------------
3re3mo3ve3sy3mb3ol | re3mo3ve3sy3mb3ol
(1 row)
如果将 StrictUDxParameterChecking
设置为“1”,UDx 将忽略 wrongParam
并正常运行。但是,它还会发出警告消息:
=> ALTER DATABASE DEFAULT SET StrictUDxParameterChecking = 1;
ALTER DATABASE
=> SELECT '3re3mo3ve3sy3mb3ol' original_string, RemoveSymbol('3re3mo3ve3sy3mb3ol' USING PARAMETERS symbol='3', wrongParam='x');
WARNING 4320: Parameter wrongParam was not registered by the function and cannot be coerced to a definite data type
original_string | RemoveSymbol
--------------------+-------------------
3re3mo3ve3sy3mb3ol | re3mo3ve3sy3mb3ol
(1 row)
如果将 StrictUDxParameterChecking
设置为 '2',UDx 将在尝试调用 wrongParam
时遇到错误并且无法运行。相反,它会生成错误消息:
=> ALTER DATABASE DEFAULT SET StrictUDxParameterChecking = 2;
ALTER DATABASE
=> SELECT '3re3mo3ve3sy3mb3ol' original_string, RemoveSymbol('3re3mo3ve3sy3mb3ol' USING PARAMETERS symbol='3', wrongParam='x');
ERROR 0: Parameter wrongParam was not registered by the function