从以逗号分隔的字符串中获取值
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
将它们转换为适当的字段作为命名列所示。
我有这个字符串:
[ 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
将它们转换为适当的字段作为命名列所示。