Re: Help needed with XMLTABLE

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: Help needed with XMLTABLE
Дата
Msg-id CAFj8pRB5WNJHXaFo_Dq-Giv34fngypg2Y_YEAtjX2NMA4y-sHQ@mail.gmail.com
обсуждение исходный текст
Ответ на Help needed with XMLTABLE  (Dilip Kumar <dilipbalaut@gmail.com>)
Список pgsql-general


st 15. 4. 2020 v 7:32 odesílatel Dilip Kumar <dilipbalaut@gmail.com> napsal:
One of our customers tried to use XMLTABLE syntax without
row_expression, which works fine with ORACLE but doesn't work with
PostgreSQL.  So can anyone suggest what alternative we can use?

CREATE TABLE user_pool_clean (
    fk_user_pool_pk bytea NOT NULL,
    user_id character varying(255) NOT NULL,
    email_address character varying(250),
    is_mil numeric,
    is_civ numeric,
    is_ctr numeric,
    is_gov numeric,
    is_edu numeric,
    role_id character varying(50),
    user_profile_id character varying(50),
    service_branch_id character varying(50),
    mil_pay_grade_id character varying(50),
    my_auds character varying(4000),
    my_orgs character varying(4000),
    processed character(1) DEFAULT 'N'::bpchar NOT NULL
);

insert into user_pool_clean
values('995CECDC1881375DE05312A270C7CF56','10015706','noemail@fter.dbrefresh.mil',0,0,0,0,0,'1','4','700006','3','1706882','1707720','Y');

insert into user_pool_clean
values('995CECDC1905375DE05312A270C7CF56','10015848','noemail@fter.dbrefresh.mil',0,0,0,0,0,'1','3','700015','11','
1705562,1708486','1710621','Y');


SQL> SELECT upc.is_mil,TRIM(column_value) src
         FROM   user_pool_clean upc
               ,xmltable(('"'|| REPLACE( upc.my_auds, ',', '","')|| '"'));

    IS_MIL SRC
---------- ---------------
     0       1705562              --------O/P from the oracle database
     0        1708486
    0        1706882

postgres[7604]=# SELECT upc.is_mil,TRIM(column_value) src
postgres-#          FROM   user_pool_clean upc
postgres-#                ,xmltable(('"'|| REPLACE( upc.my_auds, ',',
'","')|| '"'));
ERROR:  syntax error at or near ")"
LINE 3: ... ,xmltable(('"'|| REPLACE( upc.my_auds, ',', '","')|| '"'));


this example is very classic - I newer see ugly code and dirty data elsewhere than on Oracle

SELECT upc.is_mil,
       TRIM(column_value) src
  FROM   user_pool_clean upc,
         unnest(string_to_array(replace(my_auds,e'\n',''), ',')) column_value;
┌────────┬─────────┐
│ is_mil │   src   │
╞════════╪═════════╡
│      0 │ 1706882 │
│      0 │ 1705562 │
│      0 │ 1708486 │
└────────┴─────────┘
(3 rows)
SELECT upc.is_mil,
       TRIM(column_value) src
  FROM   user_pool_clean upc,
         regexp_split_to_table(replace(my_auds,e'\n',''), ',') column_value;
┌────────┬─────────┐
│ is_mil │   src   │
╞════════╪═════════╡
│      0 │ 1706882 │
│      0 │ 1705562 │
│      0 │ 1708486 │
└────────┴─────────┘
(3 rows)




Regards

Pavel
 
--
Regards,
Dilip Kumar
EnterpriseDB: http://www.enterprisedb.com


В списке pgsql-general по дате отправления:

Предыдущее
От: Laurenz Albe
Дата:
Сообщение: Re: pg_basebackup && long time storage of wal_archive/ content
Следующее
От: Pavel Stehule
Дата:
Сообщение: Re: Help needed with XMLTABLE