Comma seperated values..
I have a string values like this an input to the stored procedure, LED32,134AB, 65FR,3422, ANZ82.
i need to convert this as ('LED32','134AB', '65FR','3422', 'ANZ82') to make use in the IN clause.
Can someone help me to convert the string?
And to hit the indexes;
CREATE OR REPLACE FUNCTION fn(pv_list VARCHAR2) RETURN SYS_REFCURSOR IS
rc SYS_REFCURSOR;
BEGIN
OPEN rc FOR
WITH subq AS (
SELECT regexp_substr(pv_list,
'[[:alnum:]]+',
regexp_instr(pv_list, '(^|,)', 1, rownum)) val
FROM dual
CONNECT BY rownum <= length(regexp_replace(pv_list, '[^,]')) + 1)
SELECT c
FROM t, subq
WHERE t.c = subq.val;
RETURN rc;
END;
/
Similar Messages
-
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> -
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;
... -
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. -
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());
} -
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 -
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 -
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 -
Convert rows into comma seperated values
Hello I have a question,
I have a table like this.
Memid values
1 10
1 20
2 30
3 50
3 60
3 10
i want to convert it like this
memid values
1 10,20
2 30
3 50,60,10
Can you please provide a solution..
ThanksSELECT Memid,
STUFF((SELECT ',' + CAST([values] AS varchar(10))
FROM Table
WHERE Memid = t.Memid
FOR XML PATH(''),TYPE),value('.','varchar(max)'),1,1,'') AS [values]
FROM (SELECT DISTINCT Memid FROM Table)t
see
http://visakhm.blogspot.in/2014/01/rowset-concatenation-with-special.html
Please Mark This As Answer if it solved your issue
Please Vote This As Helpful if it helps to solve your issue
Visakh
My Wiki User Page
My MSDN Page
My Personal Blog
My Facebook Page -
Converting comma seperated values in rows
Hi Friends
I have a column in which values are like
col1
1,2,3How do I convert them into the following:
col2
1
2
3Thanks...darshilm wrote:
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
with data as
select 1 as col1, 'a,b,c' as col2 from dual union all
select 2, 'd,e,f' from dual
select
col1,
regexp_substr(col2, '[^,+]', 1, t.column_value) as split_string
from
data d,
table(cast(multiset(select level from dual connect by level <= length(regexp_replace (d.col2, '[^,]+')) + 1) as sys.OdciNumberList)) t
12 /
COL1 SPLIT
1 a
1 b
1 c
2 d
2 e
2 f
6 rows selected.
Elapsed: 00:00:01.12
ME_XE?
ME_XE?select * from v$version;
BANNER
Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
5 rows selected.
Elapsed: 00:00:01.00
ME_XE?
Maybe you are looking for
-
My Mac Pro Desk Top computer no longer can "see" my second display??
I've tried reversing the connections on the back of the MacPro but it still doesn't "see" the second display. I've had these two displays hooked up for years with no problems. I recently upgraded to Mountain Lion and I just had the MacPro in the Ap
-
Change the colour of critical activity
Dear All, I want to change the colour of critical activity in project planning board (Date bar text). I am not able to find the solution for that. Kindly guide me on the same. Regards Abhishek Sinha
-
AS CS3 - how to paste then select pasted text
Would love help with this: Part of my script will paste text. After pasting, I would like the script to then select the pasted text (so that it can proceed to apply a style sheet). How can I specify such a selection? Thanks.
-
Aperture not reading EXIF Image Capture time properly
Hi I have recently imported a folder of Raw/JPEG files into Aperture as a new project. They previously had been managed in Media Pro. When I sorted the images by date, I found that some (but not all) Raw files didn't have the image capture time rec
-
ATM Light no longer available for Windows
I just went to the download page for ATM Light, and found that while the Mac version is still available, there is no longer a link to download ATM 4.1.2 for Windows. All that's there is a note saying that it's not needed for Windows 2000 and the syst