Inserting comma seperated values
I created a stored procedure that creates an order_id. Using this id, the products and their pricetag are inserted. Hereafter the garnishes are inserted for each product.
Creating an order id and inserting the products and their pricetag are working. The problem is at the inserting of garnishes.
The data is received by parameters, and I have also created a user defined type: where garnishId holds the comma seperated ids.
CREATE TYPE [dbo].[ppg] AS TABLE(
[ProductId] [int] NULL,
[PriceId] [int] NULL,
[garnishId] [VARCHAR](MAX) NULL
this is the stored procedure:
ALTER PROCEDURE [dbo].[sp_create_order]
(@userId uniqueidentifier, @productPriceGarnishes dbo.ppg READONLY, @comment varchar(250))
AS
BEGIN
DECLARE @orderId int
DECLARE @orderDetailId int
INSERT INTO orders (user_id, confirmed,comment) values(@userId,0,@comment);
--Select last inserted PK
SELECT @orderId=SCOPE_IDENTITY()
-- insert products and price tag using @orderId
INSERT INTO order_detail (order_id, product_id,price_id)
SELECT @orderId, p.ProductId,
p.PriceId
FROM @productPriceGarnishes p
SELECT @orderDetailId=SCOPE_IDENTITY()
-- insert garnishes using the orderDetailId
INSERT INTO order_detail_garnish (order_detail_id,garnish_id)
SELECT @orderDetailId, (SELECT * FROM SplitDelimiterString(p.garnishId))
FROM @productPriceGarnishes p
END
RETURN @orderId
I found a function that splits the string by a delimiter in this website:
http://www.codeproject.com/Tips/586395/Split-comma-separated-IDs-to-ge
Where you can retrieve the ids by this query:
(SELECT * FROM SplitDelimiterString(p.garnishId)
The problem is that I don't know how to add these ids with their corresponding orderDetailId, after each product is added.
Unfortunately it appears you assume too much. Presumably the reason you chose to define @productPriceGarnishes as a table is to support the creation of multiple rows. And you use these rows to insert into the order_detail table which has an identity
column as the primary key (again, presumably). So the question then becomes how do you get the identity values for ALL of the inserted rows? You can't do that with SCOPE_IDENTITY - your code currently is designed with the assumption that there
is only one row to be inserted. To work around that limitation you need to use the output clause (examples can be found by searching).
Next comes another problem. How do you know which identity value is assigned to which row of your table variable during the insert? You need some sort of natural key to associate the inserted rows with the rows in the table variable. Do
you have one? Before you think you do, you need to think about what restrictions are placed on the content of the table variable (if any). Is it possible to have multiple rows with the same values for ProductId and PriceId? Do not assume
- you need to be certain that this is or is not a possibility.
Assuming that the rows are unique (which simplifies things greatly), you associate the inserted order_detail rows to the table variable via something like:
select ... from @ins_detail as ins inner join @productPriceGarnishes as ppg
on ins.ProductId = ppg.ProductId and ins.PriceId = ppg.PriceId
Note that @ins_detail is a table variable that you would declare and populate via the output clause. It will contain the identity values for each row that you inserted. With that, you can then generate the rows that you need to insert into the garnish
table by applying the results of your splitter function. Which is a step that I'll skip for now since you have much reading and work to do.
Now some last comments. I am suspicious of a column named PriceId. That is not a good sign - price is an attribute of something and not the basis of a relationship between tables. The use of identity columns (especially as primary keys)
can be a problem - and this is one good example. Based on what I've just written and its assumptions, the natural key for order_detail is (order_id, product_id, price_id) - why do you need an identity column? Again, searching will find past
discussions about identity columns and their usage.
Similar Messages
-
Inserting comma seperated values into table
Hi,
There is a variable like this,
var= 'C0001,C0002,C0003';
I want c0001 c0002 and c0003 to get inserted into some temp table as seperate rows, how do I do that.
Thnx again ur your response.Hi,
There is a variable like this,
var= 'C0001,C0002,C0003';
I want c0001 c0002 and c0003 to get inserted into some temp table as seperate rows, how do I do that.
Thnx again ur your response. -
Have a column which is having comma seperated values.. and i am trying to s
Have a column which is having comma seperated values.. and i am trying to seperate it.
I am trying to create a stored procedure ..Version 11g xe. .and apex version 4..
Here is the part of code..I cant make a procedure. .cause my statement consist with clause..
create or replace procedure ins_adv_invoice
(mmagazine_no number,madvtno number,missueno number,msection varchar2,mpagenumber varchar2,msalesman_code varchar2)
is
cursor cx is with testa as
(select pagenumber name from advertiser)
select regexp_substr(pagenumber, '[^,]+', 1, rownum) result
from advertiser
connect by level <= length(regexp_replace(pagenumber, '[^,]+')) + 1
where advt_no = madvtno;
begin
for xxx in cx
loop
insert into adv_invoice (magazine_no,advtno,adissue,section,page_number,salesman_code)
values (mmagazine_no,madvtno,missueno,msection,xxx.result,msalesman_code);
end loop;
end;
But when i run this .. it doesnt create procedure. .I get he following error..
LINE/COL ERROR
5/14 PL/SQL: SQL Statement ignored
9/69 PL/SQL: ORA-00933: SQL command not properly ended
SQL>
Still not able to figure it out..Can any one help..
ThanksChange the query to swap the last two lines:
cursor cx is with testa as
(select pagenumber name from advertiser)
select regexp_substr(pagenumber, '[^,]+', 1, rownum) result
from advertiser
where advt_no = madvtno
connect by level <= length(regexp_replace(pagenumber, '[^,]+')) + 1;
... -
How to store Comma Seperated Value in a File with Jsp
Hai friends,
I need to get all the filed values like Empname,salary ,location..........
and at the end of jsp page i have to put a browse button when i choose a file using theis browse button the total content in the form shoud store in that file as comma seperated values.1. Create JSP
2. When you click the button call the event that saves the data in CSV format
Your question is so broad, I don't have exact answer for you.
What have you done so far?
The man with blues. -
How to query the comma seperated values stored in Database
Hi,
I have a strange scenario, I am storing the specific data as a comma seperated value in the database. I want to query the DB with the comma seperated value as a Bind variable against the comma seperated value stored in DB.
For eg : The data stored in DB has
Row1 - > 1,2,3,4,5,6,7,8
Row2 - > 4,5,6,7,8,9,10
When I pas the Bind variable as '4,8' I should get Row1 and Row2 .
Quick help his highly appreciated.. Thanks in AdvanceOh, and if you actually wanted the data returned rather than just the row primary keys....
SQL> ed
Wrote file afiedt.buf
1 with t as (select 1 as rw, '1,2,3,4,5,6,7,8' as txt from dual union all
2 select 2, '4,5,6,7,8,9,10' from dual union all
3 select 3, '1,6,7,9' from dual)
4 -- end of test data
5 ,r as (select '4,8' as req from dual)
6 -- end of required data
7 ,split_t as (select rw, regexp_substr(txt, '[^,]+', 1, rn) as val
8 from t, (select rownum rn from dual connect by rownum <= (select max(length(regexp_replace(t.txt, '[^,]'))+1) from t))
9 where regexp_substr(txt, '[^,]+', 1, rn) is not null
10 )
11 ,split_r as (select regexp_substr(req, '[^,]+', 1, rownum) as val
12 from r
13 connect by rownum <= length(regexp_replace(req, '[^,]'))+1
14 )
15 --
16 select distinct t.rw, t.txt
17 from split_t st join split_r sr on (st.val = sr.val)
18 join t on (t.rw = st.rw)
19* order by 1
SQL> /
RW TXT
1 1,2,3,4,5,6,7,8
2 4,5,6,7,8,9,10
SQL> -
Insert comma seperator in a currency
Hello All,
I need to condense an amount.So i am assigning it to a char value and condensing it.As I am assigning it to a char value,the thousand seperator (i.e ',' ) is removed from the value.I want that back.
Here is the sample code am using ...
data : rwbtr type reguh-rwbtr ,
value type string .
rwbtr = 1000.
value = rwbtr .
condense value no-gaps.
write / rwbtr .
write / value .
What next i need to do so that i will get a condensed comma seperated value.
Thanks,
nsp .Use WRITE rwbtr TO value CURRENCY <your currency>.
Regards,
John. -
ODI: Loading Comma Seperated Value Flat files...
We are attempting to load our flatfiles using the LKM File to Oracle (SQLLDR)...
First something that is goofy is that the SQLLDR appears to be looking for a .dat file instead of the flatfile we have given it. Our flatfiles do not have any extentions on them (ex. mmi_prem_fin, mmi_agent_contact, etc...) Is SQLLDR looking for a flatfile with an extention and if not finding one looking for a .dat file extention? Anyone run into this?
Second, after we get past that first problem then the scond one that creeps up is the SQLLDR appears to be bringing in the information into the source table without excluding the quotes around the field information. We specified that the flatfile is comma delimited and text is seperated by dbl quotes.
Any and all help will be apprecaited... Thank you in advance...
Tom CusickJUPS wrote:
Hi,
I am facing trouble in inserting comma separated list in form of single string like:
Year = '2009,2010,2011,2012'
Now i need to push each value into a VARRAY, can anyone help me on this.
Thanks,
SreekanthLOOP
Handle: JUPS
Status Level: Newbie
Registered: Aug 6, 2008
Total Posts: 201
Total Questions: 98 (59 unresolved)
so many questions & so few answers.
how sad!
Edited by: sb92075 on Sep 13, 2011 10:20 AM -
How to convert string containing comma seperated values to an array
my requirement is i have to first convert an comma seperated string to an array
after that i have to pass the array values to a for loop
eg:i have a string str=(456,457,487,465,478)
These values i have to put in an array.
i then i have to pass the array values to a for loopWe understand your ¿homeworks? We are helping you, but it seems like you want us to do it.
Try it yourself with some of the instructions.
Anyway if there aren´t homeworks, use dinamyc sql:
declare
varray := '(45,65,12,4)';
begin
execute immediate 'update table set ss=''uu'' where id in ' || varray;
end; -
Can you pls help me on this
table: emp_master
Ename Bonus(%)
abc 15,5,20,10,40,10
xyz 10,10,20,60
table emp_sal
Ename Var
abc 1000
xyz 2000
output result :
Ename Var
abc 150(15 % X 1000)(15 is the first value from the comma seperated list in emp_master table)
abc 50 ( 5 % X 1000) (5 is the second value from the comma seperated list in emp_master table)
abc 200 (20 % X 1000)
abc 100
abc 400
abc 100
xyz 200
xyz 200
xyz 400
xyz 1200Thanks in advance
Edited by: user12093849 on Feb 3, 2010 12:34 AMAssuming you're on at least database version 10G:
SQL> -- generating sample data:
SQL> with emp_master as ( select 'abc' ename, '15,5,20,10,40,10' bonus from dual union all
2 select 'xyz', '10,10,20,60' from dual
3 )
4 , emp_sal as ( select 'abc' ename, 1000 var from dual union all
5 select 'xyz', 2000 from dual
6 )
7 --
8 -- actual query:
9 --
10 select m.ename
11 , m.bonus
12 , s.var*m.bonus
13 from ( select a.ename
14 , level lvl
15 , regexp_substr (bonus, '[^,]+', 1, level)/100 bonus
16 from emp_master a
17 connect by level <= length(regexp_replace(bonus,'[^,]*'))+1
18 group by ename, bonus, level
19 ) m
20 , emp_sal s
21 where s.ename=m.ename
22 order by m.ename, m.lvl
23 /
ENA BONUS S.VAR*M.BONUS
abc ,15 150
abc ,05 50
abc ,2 200
abc ,1 100
abc ,4 400
abc ,1 100
xyz ,1 200
xyz ,1 200
xyz ,2 400
xyz ,6 1200
10 rows selected. -
Converting the comma seperator value format
i am getting the content of a table in a internal table with comma separator value format, dynamically by using dfies table i am getting the header of the table, and displaying it in the output, now my query is that the content of the data which i am getting in a itab having only one field of type string
data : begin of itab occurs 0,
data1 type string,
end of itab.
some where they were concatenating the content of the data and storing it inthe itab, now i want the content of the itab should be displayed corresponding to there header in the outputHi Santosh,
You can remove the commas from the record by using the REPLACE command as below -
LOOP AT itab.
DO.
REPLACE ',' WITH '' INTO itab-data1.
IF sy-subrc NE 0.
EXIT.
ENDIF.
ENDDO.
ENDLOOP.
Reward points if found useful...!
Cheers
Abhishek -
Column should display comma seperated value.
Hi All,
Iam working on Reports6i.
In my data model i have a query which gives some product names(only one column), i need to display those product names with a comma seperator.
Just like Product1,Product2,....
Can anybody guide me as this is very urgent.
Thanks in Advance
Chinni.something like this ?
WITH DATA AS (SELECT 'X' product,1 order_id FROM DUAL
UNION ALL
SELECT 'Y' product,1 order_id FROM DUAL
UNION ALL
SELECT 'Z' product,1 order_id FROM DUAL
UNION ALL
SELECT 'XX' product,2 order_id FROM DUAL
UNION ALL
SELECT 'YY' product,2 order_id FROM DUAL
UNION ALL
SELECT 'ZZ' product,2 order_id FROM DUAL
SELECT LTRIM(sys_connect_by_path(product,','), ',') PRODUCTS
FROM (SELECT product,
order_id,
row_number() OVER (partition by order_id order by product) RN,
count(product) OVER (partition by order_id) MAXROW
FROM data)
WHERE RN=MAXROW CONNECT BY PRIOR RN+1=RN
AND PRIOR ORDER_ID=ORDER_ID START WITH RN=1 -
Mapping a column with comma seperated values
Hi,
I have two tables
1. Tasks (task_id, task_description)
2. Task_assignment (username, task_assignment_value)
the task_assignment_value has a comma seperated list of task_ids.
What is the best ways to map the tables ?
Thanks in advance.
Moinuddin MohammedI have a couple of attributes where I do this. From TopLink's perspective, I just map it as a String. Then, in my accessors for the attribute, I transform the primitive between the String and an Array or however the rest of the app wants to see the attribute.
Here's an example that's actually more complicated than absolutely necessary. The mapped attributed is indicatorValueListString. It is lazily converted to an Array of Enums when it is first accessed. And it is converted back to a String in the preWriteEventCallback that is mapped in the TopLink descriptor.
This implementation attempts to minimize the number of times the String<->Array conversion takes place, but if that's not a concern, it could be made much more simple. Also, at my company we privately manage collections with the Collection classes for dynamic allocation, but publicly exchange Arrays for type-safety. This could also be factored out. ValuedEnumUtils basically manages asking the enum for its delimiter and performing the actual conversion between a String and an Array or back.
private String indicatorValueListString;
private List indicatorValueSelections;
private List indicatorValueSelections() {
if (indicatorValueSelections == null) {
indicatorValueSelections = new ArrayList();
if (indicatorValueListString != null) {
indicatorValueSelections =
java.util.Arrays.asList(ValuedEnumUtils.decodeEnumString(
IndicatorValueEnum.class,indicatorValueListString));
return indicatorValueSelections;
private void indicatorValueSelections(List newIndicatorValueSelections) {
indicatorValueSelections = newIndicatorValueSelections;
public IndicatorValueEnum[] getIndicatorValueSelections() {
return (IndicatorValueEnum[])indicatorValueSelections().toArray(new IndicatorValueEnum[0]);
public void setIndicatorValueSelections(IndicatorValueEnum[] newIvSelections) {
indicatorValueSelections(java.util.Arrays.asList(newIvSelections));
public boolean addIndicatorValueSelection(IndicatorValueEnum anIvEnum) {
return indicatorValueSelections().add(anIvEnum);
public boolean removeIndicatorValueSelection(IndicatorValueEnum anIvEnum) {
return indicatorValueSelections().remove(anIvEnum);
public void preWriteEventCallback(DescriptorEvent aDescriptorEvent) {
// Note: Not using accessor to avoid lazy initialization if no changes
// are necessary.
if (indicatorValueSelections != null) {
indicatorValueListString =
ValuedEnumUtils.encodeEnumString((ValuedEnum[])indicatorValueSelections.toArray());
} -
Operations on comma seperated values..
Hi all,
We have some histogramic values which are kept in one column and from time to time we need to propagate them in order to fill the history tables like :
table_1
c1 -- c2 -- c3
a -- 1,1,1--11
a -- 2,2,2--11
a -- 3,3,3--11
b -- 4,4,4--22
b -- 5,5,5-22
c -- 6,6,6-22
select c1,sum???(c2),sum(c3) from table_1 group by c1;
c1 -- sum???(c2) -- sum(c3)
a -- 6,6,6--33
b -- 15,15,15--66
The point is to do the operations seperaterly with the first value, second value,... seperately.
Any ideas about this ?
Thanks,
EvrenHi, Evren,
Welcome to the forum!
Whenever you have a problem, it helps if you post your sample data in some form that people can use to actually re-create it.
CREATE TABLE and INSERT statements are great. for example:
CREATE TABLE table_1
( c1 VARCHAR2 (5)
, c2 VARCHAR2 (20)
, c3 NUMBER
INSERT INTO table_1 (c1, c2, c3) VALUES ('a', '1,1,1', 11);
INSERT INTO table_1 (c1, c2, c3) VALUES ('a', '2,2,2', 11);
INSERT INTO table_1 (c1, c2, c3) VALUES ('a', '3,3,3', 11);
INSERT INTO table_1 (c1, c2, c3) VALUES ('b', '4,4,4', 22);
INSERT INTO table_1 (c1, c2, c3) VALUES ('b', '5,5,5', 22);
INSERT INTO table_1 (c1, c2, c3) VALUES ('c', '6,6,6', 22);That's not a very good design. If the items in c2 are separate entities, they should be in separate columns (or maybe on sepaarte rows, in a separate table, with a one-to-many relationship to table_1).
If you can't change the table structure permanently (which is the best solution), then you'll have to generate a result set that mimics that (more or less) every time you need to use that column as separate entities.
[This thread|http://forums.oracle.com/forums/thread.jspa?threadID=945432&tstart=0] shows how to split a delimited list into parts.
After you've calculated the individual totals, use the || operator to cram them back into one column, if necessary.
For example:
SELECT c1
, SUM (TO_NUMBER (REGEXP_SUBSTR (c2, '[^,]+', 1, 1))) || ',' ||
SUM (TO_NUMBER (REGEXP_SUBSTR (c2, '[^,]+', 1, 2))) || ',' ||
SUM (TO_NUMBER (REGEXP_SUBSTR (c2, '[^,]+', 1, 3))) AS sum_c2
, SUM (c3) AS sum_c3
FROM table_1
GROUP BY c1
[email protected] wrote:Hi all,
We have some histogramic values which are kept in one column and from time to time we need to propagate them in order to fill the history tables like :
table_1
c1 -- c2 -- c3
a -- 1,1,1--11
a -- 2,2,2--11
a -- 3,3,3--11
b -- 4,4,4--22
b -- 5,5,5-22
c -- 6,6,6-22
select c1,sum???(c2),sum(c3) from table_1 group by c1;
c1 -- sum???(c2) -- sum(c3)
a -- 6,6,6--33
b -- 15,15,15--66Are you sure that's the output you want from the data you gave?
When I run the query above with the same data, I get:
C1 SUM_C2 SUM_C3
a 6,6,6 33
b 9,9,9 44
c 6,6,6 22 -
How to insert comma delimited values into a table
I have a variable holding values like,
'A,Ba,Ccc' OR
'1,2,3,4'
I want to know how to convert and insert these values in oracle table as seperate rows like,
A
Ba
Ccc[ OR ]
1
2
3
4
Thanks,
PrevinAnswered (I guess) in this dbms_utility.comma_to_table.
Cheers, the ever helpful APC -
Passing Multiple comma seperated values to a report
Hi,
I have a form that a user can select multiple customer ids by checking the check box. I need to pass these values to report to be used in the IN clause of query. eg.
select a, b, c
from test
where a in ('01', '03', ...)
how can i do that
FaisalHi Faisal
I've used the solution discussed here and works fine.
http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:110612348061
Regards.
Cecilio
Maybe you are looking for
-
BAPI BAPI_ALM_ORDER_MAINTAIN is not updating data
Hi Experts, i am facing a problem in using 'BAPI_ALM_ORDER_MAINTAIN' objective is to use this FM for inserting an operation activity or updating description of exisitng operation for one of service order. at the end of execution it does not give any
-
User can't be found in SU01. However he does exist and can be found in SU10
Hello SAP friends, I have a strange problem here. There's one user in our SAP system who's can't be found in TA su01search list, when searching "*" with F4. The user IS active, was logged just yesterday, it seems as his account has everything set OK.
-
802.1x WLC 2504.
Hey guys, I'm going to be configured Local PEAP on the WLC. I just had a quick question. When a user puts in a login/password to access the network, can it be the same login/password for everyone in an area, or does it have to be a unique login/passw
-
Installation Workspace with FM issuse
hi all, i installed hyperion financial management with oracle. while configuring with financial management all the option are getting sucess as well as for workspace. classic planning application tab does not visible in workspace when launching works
-
Can't get rid of the JTable's white column divider
I want a JTable that has no grid lines and no space between cells, with or with out headers. Basicly all cells should butt against each other with no grid lines. So far I have succeeded with this, with a exception to some white divider that is about