2013-03-06 30 views
-2

我在哪里我收到三个弦参数 ItemCode ITEMNAME 量一体化项目工作如何转换分号分隔成

和值将在此格式

ItemCod参数值 T1; T2; T3;

ItemName参数值 铅笔盒;橡皮擦;鼠标垫;

金额参数值 1900; 2000; 8900;

现在我想有一个过程中,我会收到这些参数和查询将它转换为列和记录。我不是SQLServer的人,我在Oracle中做了类似的发送。但是,这是一个分半分钟接收并转换成列和行。我很抱歉质量差的帖子。这是Oracle的尝试。

create or replace 
PROCEDURE PROC_SENDREQDETAILS 
(
    P_REQ_NUMBER VARCHAR2 
, P_ATTRIBUTE1 VARCHAR2 
, P_LOCATION_NAME VARCHAR2 
, P_ITEM_ID VARCHAR2 
, P_QTY VARCHAR2 
, P_NEED_BY_DATE VARCHAR2 
, P_ATTRIBUTE3 VARCHAR2 
) IS 
BEGIN 

INSERT INTO PO_REQUISITIONS_STAGING(req_number_segment1, attribute1, location_name, item_id, quantity, need_by_date, attribute3) 
select regexp_substr(request_number,'[^;]+',1,level), 
     regexp_substr(attribute1,'[^;]+',1,level), 
     regexp_substr(location_name,'[^;]+',1,level), 
     regexp_substr(item_id,'[^;]+',1,level), 
     regexp_substr(quantity,'[^;]+',1,level), 
     regexp_substr(need_by_date,'[^;]+',1,level), 
     regexp_substr(attribute3,'[^;]+',1,level) 
    from (
     select P_REQ_NUMBER request_number, P_ATTRIBUTE1 attribute1, P_LOCATION_NAME location_name, P_ITEM_ID item_id, P_QTY quantity, P_NEED_BY_DATE need_by_date, P_ATTRIBUTE3 attribute3 
     from dual 
    ) 
    connect by regexp_substr(request_number,'[^;]+',1,level) is not null; 
end; 
--END PROC_SENDREQDETAILS; 
+0

请编辑您的帖子,包括你的一个解决方案的尝试。谢谢。 – bernie 2013-03-06 04:24:20

+0

*质量很低:*您尝试过什么?你的代码在哪里? – 2013-03-06 04:25:18

+0

好的我刚刚更新了我的问题。 – user2050367 2013-03-06 04:55:20

回答

0

可能与此有关:Can I tokenize a string using t-SQL

您可以使用XML查询tokenise值:

INSERT INTO t 
(cod, name) 
VALUES 
('T1;T2;', 
'Pencil Box;Eraser;'); 

--------------------------- 
|COD |NAME    | 
|T1;T2;|Pencil Box;Eraser;| 
--------------------------- 

INSERT t2 
SELECT 
    CAST('<r>'+REPLACE(cod,';','</r><r>')+'</r>' AS XML).query('/r[1]').value('.','varchar(256)') cod, 
    CAST('<r>'+REPLACE(name,';','</r><r>')+'</r>' AS XML).query('/r[1]').value('.','varchar(256)') name 
FROM t; 

INSERT t2 
SELECT 
    CAST('<r>'+REPLACE(cod,';','</r><r>')+'</r>' AS XML).query('/r[2]').value('.','varchar(256)') cod, 
    CAST('<r>'+REPLACE(name,';','</r><r>')+'</r>' AS XML).query('/r[2]').value('.','varchar(256)') name 
FROM t; 

---------------- 
|COD|NAME  | 
|T1 |Pencil Box| 
|T2 |Eraser | 
---------------- 

http://sqlfiddle.com/#!3/258a5/1

+0

Cong superbbbbbbbbb ...你摇滚人:)只需要你的代码中的一件事是我不想插入到表中的值..只想使用SELECT获得输出只..没有插入:)可以我有一个查询将使列和生成输出作为多个记录? – user2050367 2013-03-06 05:52:16

+0

我不会将此标记为答案,因为根据此解决方案,记录数量未定义,并且可能超过2个,因此每个解决方案都提出了有限的解决方案。 – user2050367 2013-03-07 05:16:16