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

take values from a string of characters separated from comma

我有这个字符串:

[ 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?

中做到这一点
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;
/

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

然而,您可以实现它,就像使用 REGEXP_SUBSTR 拆分字符串并使用 PIVOT 将它们转换为适当的字段作为命名列所示。