从逗号分隔的字符串中获取值

时间:2017-09-11 08:39:52

标签: sql oracle plsql oracle-sqldeveloper

我有这个字符串:

[ Quotazioni in euro riferite al 08/08/2017
""
Paese,Valuta,Codice ISO,Codice UIC,Quotazione,Convenzione di cambio,Nota
""
AFGHANISTAN,Afghani,AFN,115,80.8402,Quantità di valuta per 1 Euro
ALBANIA,Lek,ALL,047,132.275,Quantità di valuta per 1 ]

我想从第六行开始并插入变量'Country'AFGHANISTAN和ALBANIA以及变量'ID'AFN和ALL。 我怎么能在pl sql中做到这一点?

1 个答案:

答案 0 :(得分:0)

DECLARE
   v_string   VARCHAR2 (4000)
      := '[ Quotazioni in euro riferite al 08/08/2017
""
Paese,Valuta,Codice ISO,Codice UIC,Quotazione,Convenzione di cambio,Nota
""
AFGHANISTAN,Afghani,AFN,115,80.8402,Quantità di valuta per 1 Euro
ALBANIA,Lek,ALL,047,132.275,Quantità di valuta per 1 ]';

   country    VARCHAR2 (20);
   id         VARCHAR2 (5);
BEGIN
   FOR row
      IN (SELECT *
            FROM (    SELECT REGEXP_SUBSTR (line6,
                                            '[^,]+',
                                            1,
                                            LEVEL)
                                fields,
                             ROW_NUMBER () OVER (ORDER BY ROWNUM) rn
                        FROM (SELECT REGEXP_SUBSTR (v_string,
                                                    '^.*$',
                                                    1,
                                                    5,
                                                    'm')
                                        line6
                                FROM DUAL)
                  CONNECT BY REGEXP_SUBSTR (v_string,
                                            '[^,]+',
                                            1,
                                            LEVEL)
                                IS NOT NULL) PIVOT (MAX (fields)
                                                FOR rn
                                                IN (1 AS field_1,
                                                   2 AS field_2,
                                                   3 AS field_3,
                                                   4 AS field_4,
                                                   5 AS field_5,
                                                   6 AS field_6)))
   LOOP
      country := row.field_1;
      id := row.field_3;
   END LOOP;
END;
/

您的桌面设计效率不高,而且这里的数据模型不是很好。所有相关的不同记录必须始终放在适当的列中并合并为一个字符串。

然而,您可以实现它,就像使用REGEXP_SUBSTR分割字符串和PIVOT将其转换为适当的字段作为命名列一样。