2013-12-10 25 views
1

獲取給定的表名的列名我想打電話給表名手動輸入類型,那麼結果應該是表的詳細信息,我想這些功能從功能

  1. 1功能正在工作。
  2. 第二個功能不起作用。

1)

DECLARE  
All_columns varchar;   
Tab_name ALIAS FOR $1 ;  
BEGIN  
FOR All_columns IN SELECT column_name  
FROM information_schema.columns  
WHERE table_name=Tab_name  
loop  
raise notice 'Columns:%',All_columns;  
end loop;  
return All_columns;  
END;  

select test_levelfunction1('country_table');  

它顯示國家表

2)

DECLARE  
All_columns varchar ;   
Tab_name ALIAS FOR $1 ;  
BEGIN   
FOR All_columns IN SELECT Tab_name.*  
FROM Tab_name  
loop  
raise notice 'Columns:%',All_columns;  
end loop;  
return All_columns;  
END;  

呼叫select test_levelfunction1('country_table');導致錯誤的所有列。
我需要從country_table的所有細節。
我該如何解決這個功能?

+0

'我想調用一些表的細節手動輸入類型... ...請澄清你真正想要什麼。 –

+0

yes.i需要手動輸入表名,那麼結果應該是表的細節。 – PathmanKIP

回答

1

可以大大簡化這一任務。這個SQL函數做這項工作:

CREATE OR REPLACE FUNCTION f_columns_of_tbl(_tbl regclass) 
    RETURNS SETOF text AS 
$func$ 
SELECT quote_ident(attname) AS col 
FROM pg_attribute 
WHERE attrelid = $1    -- valid, visible table name 
AND attnum >= 1    -- exclude tableoid & friends 
AND NOT attisdropped   -- exclude dropped columns 
ORDER BY attnum 
$func$ LANGUAGE sql; 

電話:

SELECT f_columns_of_tbl('myschema.mytable'); -- optionally schema-qualified name 

有關詳細信息,鏈接和PLPGSQL版本考慮相關回答你最後一個問題:
PLpgSQL function to find columns with only NULL values in a given table