Click here to Skip to main content
15,898,036 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am trying to build a function which check for the schema and table in database if present then select the table values else create that schema and table and passing schema and table name as parameters of a function.




SQL
CREATE OR REPLACE FUNCTION master.chkbypram(schemaname text,state text,wallmaterial text,roofmaterial text)
  RETURNS SETOF refcursor AS 
$BODY$ 
DECLARE 
Resulttable refcursor;
tblinclusion text;
Begin
tblinclusion = 'inclusion'||'_'|| $2 ;
 if ( (execute 'SELECT exists(select schema_name FROM information_schema.schemata WHERE schema_name = '||$1||')')and ( execute 'select exists(select * from information_schema.tables where table_name='||tblinclusion||')') )
	then
	  OPEN Resulttable FOR execute ' select * from '||$1||'.'||$2 using schemaname,state;
	   RETURN NEXT Resulttable;
else
		execute 'CREATE SCHEMA  '||&1 using schemaname;
			tblinclusion = 'inclusion'||'_'|| $2 ;
		execute 'create table '||&1||'.'||tblinclusion||' AS 
				select * from master.population_2 where
				statecode = '||$2 
				|| 'and distinct_key not in
				(
				select distinct(distinct_key)
				from master.population_2 
				where  
				( 
				statecode = '||$2 
				||'and cast (substr(population_2.hhd_housingcodes, 4) as int )  >= 4 
				and substr(population_2.hhd_housingcodes, 1,1)  in (SELECT code FROM regexp_split_to_table('||$3||', E',') AS code) 
				and  substr(population_2.hhd_housingcodes, 2,1) in (SELECT code FROM regexp_split_to_table('||$4||', E',') AS code)
				)
				or  
				statecode = '||$2 
				||'and
				(
				cast (substr(population_2.hhd_assetcodes, 4,1) as int)=3 
				or cast (substr(population_2.hhd_assetcodes, 5,1) as int)=1 
				or cast (substr(population_2.hhd_assetcodes, 3,1) as int)=1
				)
				or
				statecode = '||$2 
				||'and
				(	(cast (substr(population_2.hhd_assetcodes, 1,1) as int)=1 and cast (substr(population_2.hhd_assetcodes, 2,1) as int)in(1,3) and cast (substr(population_2.hhd_assetcodes, 6,1) as int)=1)
				or	(cast (substr(population_2.hhd_assetcodes, 1,1) as int)=1 and cast (substr(population_2.hhd_assetcodes, 2,1) as int)in(1,3) and cast (substr(population_2.hhd_assetcodes, 4,1) as int)=1)
				or	(cast (substr(population_2.hhd_assetcodes, 1,1) as int)=1 and cast (substr(population_2.hhd_assetcodes, 6,1) as int)=1 and cast (substr(population_2.hhd_assetcodes, 4,1) as int)=1)
				or	(cast (substr(population_2.hhd_assetcodes, 2,1) as int)in(1,3) and cast (substr(population_2.hhd_assetcodes, 6,1) as int)=1 and cast (substr(population_2.hhd_assetcodes, 4,1) as int)=1 )   
				) 
				) '
				using schemaname, state,wallmaterial,roofmaterial;
				 OPEN Resulttable FOR execute ' select * from '||$1||'.'||tblinclusion using schemaname,state;
				RETURN NEXT Resulttable;
end if;
	END;
$BODY$
  LANGUAGE plpgsql


when calling this funtion it is throwing error
select * from master.chkbypram('xyz','04','9,8','4,5,9');

SQL
ERROR:  type "execute" does not exist
LINE 1: SELECT ( (execute 'SELECT exists(select schema_name FROM inf...
Posted
Updated 5-Jun-13 21:07pm
v2

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900