我有这个字符串:
[ 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中做到这一点?
答案 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
将其转换为适当的字段作为命名列一样。