[英]How to include quote in plpgsql function
以下 function 標識具有 null 值的列。 如何擴展where子句以檢查 null 或空值?
coalesce(TRIM(string), '') = ''
CREATE OR REPLACE FUNCTION public.is_column_empty(IN table_name varchar, IN column_name varchar)
RETURNS bool
LANGUAGE plpgsql
AS $function$
declare
count integer;
BEGIN
execute FORMAT('SELECT COUNT(*) from %s WHERE %s IS NOT NULL', table_name, quote_ident(column_name)) into count;
RETURN (count = 0);
END;
$function$
;
您需要將引號加倍,如下所示:
CREATE OR REPLACE FUNCTION public.is_column_empty(IN table_name varchar, IN column_name varchar)
RETURNS bool
LANGUAGE plpgsql
AS $function$
declare
count integer;
BEGIN
execute FORMAT('SELECT COUNT(*) from %s WHERE COALESCE(TRIM(%s),'''') <> ''''', table_name, quote_ident(column_name)) into count;
RETURN (count = 0);
END;
$function$
;
編輯:
重新閱讀你的問題,我有點不確定你是否得到了你想要的。 就目前而言,如果至少一行在給定列中有值,則 function 將返回 false,即使所有其他行都是空的。 這真的是您想要的,還是您更願意尋找任何行中該列為空的列?
還有更多可能性 - 例如,您可以使用自定義字符串分隔符:
CREATE OR REPLACE FUNCTION public.is_column_empty(IN table_name varchar,
IN column_name varchar)
RETURNS bool
LANGUAGE plpgsql
AS $function$
DECLARE _found integer; /* attention "count" is keyword */
BEGIN
EXECUTE format($_$SELECT EXISTS(SELECT FROM %I WHERE COALESCE(trim(%I), '') <> '')$_$,
table_name, column_name)
INTO _found;
RETURN NOT _found;
END;
$function$;
您的示例有更多問題:
count
。 這在更大的桌子上可能會很慢count
、 user
、...)可能會出現一些問題COLNAME IS NOT NULL
。 它可以非常快。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.