Sunteți pe pagina 1din 1

-- Function: public.

search_columns(text, name[], name[], name[])


-- DROP FUNCTION public.search_columns(text, name[], name[], name[]);
CREATE OR REPLACE FUNCTION public.search_columns(IN needle text, IN haystack_col
umns name[] DEFAULT '{}'::name[], IN haystack_tables name[] DEFAULT '{}'::name[]
, IN haystack_schema name[] DEFAULT '{public}'::name[])
RETURNS TABLE(schemaname text, tablename text, columnname text, rowctid text)
AS
$BODY$
begin
FOR schemaname,tablename,columnname IN
SELECT c.table_schema,c.table_name,c.column_name
FROM information_schema.columns c
JOIN information_schema.tables t ON
(t.table_name=c.table_name AND t.table_schema=c.table_schema)
WHERE (c.table_name=ANY(haystack_tables) OR haystack_tables='{}')
AND c.table_schema=ANY(haystack_schema)
AND (c.column_name=ANY(haystack_columns) OR haystack_columns='{}')
AND t.table_type='BASE TABLE'
LOOP
IF EXISTS(SELECT *
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = tablename
AND COLUMN_NAME = 'ID') THEN
EXECUTE format('SELECT "ID" FROM ' || schemaname || '.' || tablename || '
WHERE cast("' || columnname || '" as text) LIKE '''|| needle ||''' ',
schemaname,
tablename,
columnname,
needle
) INTO rowctid;
IF rowctid is not null THEN
RETURN NEXT;
END IF;
END IF;
END LOOP;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100
ROWS 1000;
ALTER FUNCTION public.search_columns(text, name[], name[], name[])
OWNER TO postgres;

{pentru c utare cuvnt aproximativ, folosim %% n loc de %}

S-ar putea să vă placă și