определение таблицы с плавающей схемой - как в pl / sql - PullRequest
0 голосов
/ 03 декабря 2018

Я новичок в pl / SQL и хотел бы получить совет о том, можно ли написать этот фрагмент кода более общим способом.Под общим я подразумеваю, что я могу получить новые «исходные данные», в которых схема может отличаться.Например, то, что в настоящее время доступно как: name_1, name_2, lakename_1 в других «исходных данных», может быть доступно под другими именами, и номер столбца также может отличаться.В идеале было бы иметь один раздел кода, в котором могли бы быть определены имена столбцов.Это, вероятно, где pl / SQL вступают в действие.Заранее благодарю за помощь с этим.

SELECT


    nid,
    name_1,
    name_2,
    lakename_1,
    lakename_2,
    rivname_1,
    rivname_2,  

    concat_ws(',', "name_1", "name_2", "lakename_1", "lakename_2", "rivname_1", "rivname_2" ) concated_names,
    ---number of names
    (
        (CASE WHEN name_1 != '' THEN '1' ELSE '0' END)::integer +
        (CASE WHEN name_2 != '' THEN '1' ELSE '0' END)::integer +
        (CASE WHEN lakename_1 != '' THEN '1' ELSE '0' END)::integer +
        (CASE WHEN lakename_2 != '' THEN '1' ELSE '0' END)::integer +
        (CASE WHEN rivname_1 != '' THEN '1' ELSE '0' END)::integer +
        (CASE WHEN rivname_2 != '' THEN '1' ELSE '0' END)::integer
    ) number_of_names,



    ---unique combinations of names occurence
    (
        (CASE WHEN name_1 != '' THEN 'name1' ELSE '' END) || ',' ||
        (CASE WHEN name_2 != '' THEN 'name2' ELSE '' END) || ',' ||
        (CASE WHEN lakename_1 != '' THEN 'lakename_1' ELSE '' END) || ',' ||
        (CASE WHEN lakename_2 != '' THEN 'lakename_2' ELSE '' END) || ',' ||
        (CASE WHEN rivname_1 != '' THEN 'rivname_1' ELSE '' END) || ',' ||
        (CASE WHEN rivname_2 != '' THEN 'rivname_2' ELSE '' END) 
    ) unique_names

    ,

    geom 

    INTO canada_merged.number_of_names_per_features

FROM
    canada_merged.waterbody_and_waterlines
    where name_1 !=''
    or name_2 !=''
    or lakename_1 !=''
    or lakename_2 !=''
    or rivname_1 !=''
    or rivname_2 !='';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...