有没有可能纠正这个plpgsql(在数据库中查找null(空)列)函数

时间:2013-12-06 10:19:40

标签: sql postgresql plpgsql

我正在使用PgAdmin1.16.I修改了此函数以查找数据库中的空(空)值列,但1)当我输入(tab_name)表名时发生一些错误。 2)这也显示了一些非空值表  有可能纠正这个功能吗?

CREATE OR REPLACE FUNCTION public.get_nullcolumns("tab_name" text,"num_input" int)
DECLARE
      null_columns   varchar;
      tab_name       ALIAS FOR $1;
      num_input      ALIAS FOR $2;
BEGIN
FOR    null_columns IN SELECT quote_ident(attname)
FROM   pg_attribute
WHERE  attrelid = 'tab_name'::regclass 
AND    attnum >= num_input               
AND    NOT attisdropped           
AND    NOT attnotnull            
ORDER  BY attnum
LOOP
RAISE notice 'Tab_N:%', null_columns;
END LOOP;
RETURN null_columns;
END;

2 个答案:

答案 0 :(得分:0)

我改变了我的功能,它运作良好

WHERE  attrelid = 'tab_name'::regclass         

我修改了这个

WHERE  attrelid = tab_name::regclass       

Select get_nullcolumns('tab_name' ,num_input );     
Select get_nullcolumns('countyr_table' ,10 );     

适用于PgAdmin1.16

答案 1 :(得分:0)

使用这个更简单的SQL函数:

CREATE OR REPLACE FUNCTION public.get_nullcolumns(tab_name regclass)
  RETURNS SETOF text AS
$func$
SELECT attname
FROM   pg_attribute
WHERE  attrelid = $1
AND    attnum >= 1
AND    NOT attisdropped           
AND    NOT attnotnull            
ORDER  BY attnum
$func  LANGUAGE sql;

呼叫:

SELECT * FROM public.get_nullcolumns('mytable');

你的原文有各种语法和逻辑错误。

pgAdmin的版本是无关的,这只是GUI。