oracle 在Notepad++和Informatica中转换下面的源文件,请参阅我想要的给定源表和输出表

qlvxas9a  于 2023-02-18  发布在  Oracle
关注(0)|答案(4)|浏览(128)

源数据-

Cust_Id,Cust_Name,Cust_Address,Cust_Salary
1,Name1,Address,12,Road,40,10000
2,Name2,Addressline,2,15,20000

1.第一个场景,我想使用Informatica Powercenter像下面这样转换此平面文件并发送到目标表(Oracle)。
1.第二个场景,我想用竖线分隔符替换前两列逗号(Cust_Id、CustName)并保留地址列值中的逗号如何在记事本++中仅替换前两列逗号。
1.第三个场景,我想转换这个相同的源平面文件,并实现与Unix中的第二个场景相同的逻辑。
1.第四种方案,在Oracle中编写此方案的查询,并在单独的列中显示结果。例如:- Oracle中的预期输出
| 客户标识|客户_名称|地址|薪金|
| - ------|- ------|- ------|- ------|
| 1个|姓名1|地址:40号路12号|一万|

Informatica和记事本中的预期输出++

Cust_Id,Cust_Name,Cust_Address|Cust_Salary
1|Name1|Address,12,Road,40|10000
2|Name2|Addressline,2,15|20000
qltillow

qltillow1#

使用表达式转换从一列创建三列。2读取单列中的数据。

in_inp_data
out_Cust_Id = substr(in_inp_data,1, instr(in_inp_data,','))
var_length_cust_name= instr(in_inp_data,',',2) - instr(in_inp_data,',') -1
out_Cust_name =  substr(in_inp_data,instr(in_inp_data,',')+2,var_length_cust_name)
out_Cust_Address = substr(in_inp_data, instr(in_inp_data,',',2)+1)
Cust_Salary = substr(in_inp_data, instr(in_inp_data,',',-1))

解释-1,Name1,Address,12,Road,40,10000substr(in_inp_data,1, instr(in_inp_data,','))-这将生成1,因为它将第一个字符剪切到第一个逗号,即1。
substr(in_inp_data,instr(in_inp_data,',')+2,var_length_cust_name)-这将生成Name1,因为它将第一个逗号之后的字符串剪切到名称的长度。
substr(in_inp_data, instr(in_inp_data,',',-1))-从字符串末尾提取第一个逗号之前的最后一个字符串,即salary。

f8rj6qna

f8rj6qna2#

第四种方案答案(Oracle/SQL Developer)
表格结构

Create Table Cust_Data
(Input_Data Varchar2(255));
            
Insert Into Cust_Data Values ('1,Name1,Address,12,Road,40,10000');
Insert Into Cust_Data Values ('2,Name2,Addressline,2,15,20000');
            
Select * From Cust_Data;

语法

Select
  Substr (Input_Data, 1,
  Instr(Input_Data,',')-1) Cust_Id,
  Substr (Input_Data,
  Instr (Input_Data, ',', 1) +1,
  Instr(Input_Data,',', 1, 2) - Instr(Input_Data,',')-1) Cust_Name,
  Substr (Input_Data,
  Instr (Input_Data, ',', 1, 2) +1,
  Instr(Input_Data,',', -1, 1)- Instr (Input_Data, ',', 1, 2)-1) Cust_Address,
  Substr (Input_Data,
  Instr (Input_Data, ',', -1, 1) +1 ) Salary
From Cust_Data;
gpfsuwkq

gpfsuwkq3#

第二个方案答案(记事本++)

1.打开记事本++
1.按下Ctrl + H按钮。
1.在查找内容区域:^(.+?),(.+?),(.+),(.+?)$
1.在替换为区域中:1美元|2美元|3美元|4美元
1.选择环绕
1.选择正则表达式
1.然后单击全部替换

ni65a41a

ni65a41a4#

第一个场景答案(Informatica Powercenter)

Expression Transformation
in_Input_Data (nstring)
out_Cust_Id (integer) = SUBSTR (in_Input_Data,1, INSTR (in_Input_Data,',')-1)
var_Length_Cust_Name (integer) = INSTR(in_Input_Data,',',1, 2) - INSTR(in_Input_Data,',') -1
out_Cust_Name (nstring) =  SUBSTR(in_Input_Data,INSTR(in_Input_Data,',', 1)+1,v_Length_Cust_Name)
out_Cust_Address (nstring) =SUBSTR(in_Input_Data,INSTR(in_Input_Data,',', 1, 2)+1, INSTR(in_Input_Data,',', -1, 1)- INSTR (in_Input_Data, ',', 1, 2)-1)
Cust_Salary (Double) = SUBSTR(in_Input_Data,INSTR(in_Input_Data,',',-1,1)+1)

将所有输出端口链接到目标。

相关问题