2013-12-10 3 views
1

Я хочу назвать имя таблицы вручную входной тип, то результат должен быть детали стола, я попробовал эти функцииПолучить имена столбцов для данного имени таблицы из функции

  1. первая функция работает.
  2. 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 в обеих функциях, например .:

EXECUTE $x$SELECT * FROM $x$ || Tab_name::regclass 

http://www.postgresql.org/docs/current/static/plpgsql-statements.html

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

Смежные вопросы