create or replace masking policy test as (val string) returns string ->
case when
system$get_tag_on_current_column('tag_db.tags.a') is null OR is_role_in_session('some_prefix_' || system$get_tag_on_current_column('tag_db.tags.a'))
then val
else '**MASKED**' end;
失败:
invalid argument for function [IS_ROLE_IN_SESSION] unexpected argument [null] at position 0,
一些背景:
select is_role_in_session('foo' || NULL)
返回null,所以看起来get_tag_on_current_column返回null。。
但这没有任何意义?
所以,如果以上都不起作用,我该如何表达"仅当列已分配标签";?
尝试将OR语句拆分为2个WHEN语句,标记一在is_role_in_session之前。
当标记为null时,第一个When将为true,因此第二个When语句不会运行,因此不会出现null值错误。