Changes between Initial Version and Version 1 of Function mycatchment


Ignore:
Timestamp:
Apr 22, 2010 11:19:34 AM (15 years ago)
Author:
celine
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Function mycatchment

    v1 v1  
     1back to first page [..] [[BR]] 
     2back to ["CookBook Eda"] [[BR]] 
     3back to ["CCM2 download and load"][[BR]] 
     4 
     5{{{ 
     6-- it is necessary to create a type to hold the output type 
     7DROP TYPE IF EXISTS wso1_id; 
     8CREATE TYPE wso1_id as (wso1_id int); 
     9 
     10-- In the function I tried to create a wso type to simplify the text. Pb you need to specify  
     11-- a tablename.columname%TYPE which will have to change along with the column, hence the big ugly script below... 
     12 
     13DROP  FUNCTION IF EXISTS ccm21.mycatchment(gid_ numeric); 
     14CREATE OR REPLACE FUNCTION ccm21.mycatchment(gid_ numeric) RETURNS setof int AS $$ 
     15            DECLARE 
     16            result RECORD; 
     17            pri wso1_id%rowtype; 
     18            resultcount RECORD; 
     19            BEGIN 
     20                SELECT INTO result strahler FROM ccm21.riversegments where gid=gid_; 
     21                RAISE NOTICE 'result is %' ,result; 
     22                CASE 
     23                WHEN result.strahler=2 THEN            
     24                        RAISE NOTICE 'WSO_2 used'; 
     25                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso2_id = 
     26                                   (select wso2_id from ccm21.riversegments r  
     27                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     28                                   where r.gid=gid_); 
     29                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     30                        for pri in select wso1_id from ccm21.catchments c  where wso2_id = 
     31                                   (select wso2_id from ccm21.riversegments r  
     32                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     33                                   where r.gid=gid_) loop 
     34                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     35                        return next pri.wso1_id; 
     36                        end loop; 
     37                        return;    
     38                WHEN result.strahler=3 THEN  
     39                        RAISE NOTICE 'WSO_3 used'; 
     40                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso3_id = 
     41                                   (select wso3_id from ccm21.riversegments r  
     42                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     43                                   where r.gid=gid_); 
     44                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     45                        for pri in select wso1_id from ccm21.catchments c  where wso3_id = 
     46                                   (select wso3_id from ccm21.riversegments r  
     47                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     48                                   where r.gid=gid_) loop 
     49                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     50                        return next pri.wso1_id; 
     51                        end loop; 
     52                        return;    
     53                WHEN result.strahler=4 THEN 
     54                        RAISE NOTICE 'WSO_4 used'; 
     55                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso4_id = 
     56                                   (select wso4_id from ccm21.riversegments r  
     57                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     58                                   where r.gid=gid_); 
     59                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     60                        for pri in select wso1_id from ccm21.catchments c  where wso4_id = 
     61                                   (select wso4_id from ccm21.riversegments r  
     62                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     63                                   where r.gid=gid_) loop 
     64                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     65                        return next pri.wso1_id; 
     66                        end loop; 
     67                        return;                           
     68                WHEN result.strahler=5 THEN 
     69                        RAISE NOTICE 'WSO_5 used'; 
     70                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso5_id = 
     71                                   (select wso5_id from ccm21.riversegments r  
     72                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     73                                   where r.gid=gid_); 
     74                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     75                        for pri in select wso1_id from ccm21.catchments c  where wso5_id = 
     76                                   (select wso5_id from ccm21.riversegments r  
     77                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     78                                   where r.gid=gid_) loop 
     79                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     80                        return next pri.wso1_id; 
     81                        end loop; 
     82                        return;    
     83                WHEN result.strahler=6 THEN 
     84                        RAISE NOTICE 'WSO_6 used'; 
     85                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso6_id = 
     86                                   (select wso6_id from ccm21.riversegments r  
     87                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     88                                   where r.gid=gid_); 
     89                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     90                        for pri in select wso1_id from ccm21.catchments c  where wso6_id = 
     91                                   (select wso6_id from ccm21.riversegments r  
     92                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     93                                   where r.gid=gid_) loop 
     94                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     95                        return next pri.wso1_id; 
     96                        end loop; 
     97                        return;               
     98                WHEN result.strahler=7 THEN 
     99                        RAISE NOTICE 'WSO_7 used'; 
     100                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso7_id = 
     101                                   (select wso7_id from ccm21.riversegments r  
     102                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     103                                   where r.gid=gid_); 
     104                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     105                        for pri in select wso1_id from ccm21.catchments c  where wso7_id = 
     106                                   (select wso7_id from ccm21.riversegments r  
     107                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     108                                   where r.gid=gid_) loop 
     109                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     110                        return next pri.wso1_id; 
     111                        end loop; 
     112                        return;    
     113                WHEN result.strahler=8 THEN 
     114                        RAISE NOTICE 'WSO_8 used'; 
     115                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso8_id = 
     116                                   (select wso8_id from ccm21.riversegments r  
     117                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     118                                   where r.gid=gid_); 
     119                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     120                        for pri in select wso1_id from ccm21.catchments c  where wso8_id = 
     121                                   (select wso8_id from ccm21.riversegments r  
     122                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     123                                   where r.gid=gid_) loop 
     124                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     125                        return next pri.wso1_id; 
     126                        end loop; 
     127                        return;                           
     128                WHEN result.strahler=9 THEN 
     129                        RAISE NOTICE 'WSO_9 used'; 
     130                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso9_id = 
     131                                   (select wso9_id from ccm21.riversegments r  
     132                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     133                                   where r.gid=gid_); 
     134                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     135                        for pri in select wso1_id from ccm21.catchments c  where wso9_id = 
     136                                   (select wso9_id from ccm21.riversegments r  
     137                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     138                                   where r.gid=gid_) loop 
     139                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     140                        return next pri.wso1_id; 
     141                        end loop; 
     142                        return;                           
     143                WHEN result.strahler=10 THEN 
     144                        RAISE NOTICE 'WSO_10 used'; 
     145                        SELECT INTO resultcount count(*) from  ccm21.catchments c  where wso10_id = 
     146                                   (select wso10_id from ccm21.riversegments r  
     147                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     148                                   where r.gid=gid_); 
     149                        RAISE NOTICE 'number of primary catchments in the catchment =%',resultcount;  
     150                        for pri in select wso1_id from ccm21.catchments c  where wso10_id = 
     151                                   (select wso10_id from ccm21.riversegments r  
     152                                   join ccm21.catchments c on r.wso1_id=c.wso1_id  
     153                                   where r.gid=gid_) loop 
     154                        pri.wso1_id=CAST(pri.wso1_id AS int8); 
     155                        return next pri.wso1_id; 
     156                        end loop; 
     157                        return;                                                                 
     158                ELSE RAISE NOTICE 'Strahler is larger than this function can handle !'; 
     159                END CASE; 
     160                RETURN; 
     161            END; 
     162            $$ 
     163LANGUAGE 'plpgsql' ; 
     164COMMENT ON FUNCTION ccm21.mycatchment (gid_ numeric) IS 'Uses the gid from ccm21.riversegments, checks strahler, and select the catchment accordingly, then returns all primary catchments from this larger catchment'; 
     165}}}