Home » SQL & PL/SQL » SQL & PL/SQL » CONCATENATE QUERY (ORACLE, 8.1.7.0.0, WINDOWS 2007)
CONCATENATE QUERY [message #611783] Tue, 08 April 2014 22:07 Go to next message
kumarvk
Messages: 214
Registered: July 2004
Senior Member
Dear Experts,

I am not able to run this concatenate query as it is not displaying my required result.

I want the LIC_NOs to be displayed came in for service. for example
800 SUPER WASTE MANAGEMENT PTE LTD has got 10 units
1 in Jan, 3 came in Feb, 6 in Mar. I want these lic no to be displayed in the respective months.

I am attaching my table script and rows to be inserted, concatenate function and my sql.

CREATE TABLE MSS_RETENTION
(
  CUSTOMER  VARCHAR2(60),
  LIC_NO    VARCHAR2(10),
  CHS_NO    VARCHAR2(25),
  RO_DATE   DATE
)
PCTUSED    40
PCTFREE    10
INITRANS   1
MAXTRANS   255
STORAGE    (
            INITIAL          1M
            NEXT             1M
            MINEXTENTS       1
            MAXEXTENTS       UNLIMITED
            PCTINCREASE      0
            FREELISTS        1
            FREELIST GROUPS  1
            BUFFER_POOL      DEFAULT
           )
LOGGING 
NOCACHE
NOPARALLEL;


Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('3S TRANSPORT SERVICES', 'PC2319M', 'JALLT134PC7000044', TO_DATE('03/28/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('3S TRANSPORT SERVICES', 'PC2420C', 'JALLT134PC7000045', TO_DATE('03/28/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('3S TRANSPORT SERVICES', 'PC927X', 'JALLT134PB7000013', TO_DATE('02/11/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD1390L', 'JALFVR34P77000026', TO_DATE('03/14/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD1397T', 'JALFVR34P77000013', TO_DATE('03/14/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD1416Y', 'JALFVR34P77000014', TO_DATE('02/20/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD2076M', 'JALFVR34P77000043', TO_DATE('03/28/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD2473A', 'JALFVR34P87000001', TO_DATE('03/05/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD3610P', 'JALCYH52S97000008', TO_DATE('03/18/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD3642Y', 'JALCYZ52S97000002', TO_DATE('02/26/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'XD8025X', 'JALCYH52TD7000088', TO_DATE('03/25/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'YM3143L', 'JALFTR33P67000010', TO_DATE('02/14/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('800 SUPER WASTE MANAGEMENT PTE LTD', 'YM3365M', 'JALFTR33P67000007', TO_DATE('01/02/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'XD7855Z', 'JALEXR52ED7000066', TO_DATE('01/25/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN1518Y', 'JAANPR75HA7100847', TO_DATE('03/15/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN1869J', 'JALFVR347B7000045', TO_DATE('02/08/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN3166R', 'JAANHR85EB7100147', TO_DATE('01/11/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
Insert into MSS_RETENTION
   (CUSTOMER, LIC_NO, CHS_NO, RO_DATE)
 Values
   ('AMERICAN INTERNATIONAL INDUSTRIES (PTE) LTD', 'YN3256P', 'JALFRR907B7000166', TO_DATE('01/18/2014 00:00:00', 'MM/DD/YYYY HH24:MI:SS'));
COMMIT;


CREATE OR REPLACE FUNCTION concatenate
  (p_key_name       IN VARCHAR2,
   p_key_value      IN VARCHAR2,
   p_col_to_concat  IN VARCHAR2,
   p_table_name     IN VARCHAR2,
   p_separator      IN VARCHAR2 DEFAULT '*')
  RETURN               VARCHAR2
AS
  TYPE weak_ref_cur IS REF CURSOR;
  v_string             VARCHAR2 (4000);
  v_separator          VARCHAR2 (   3) := NULL;
  v_value              VARCHAR2 (4000);
  v_cur                weak_ref_cur;
BEGIN
  OPEN v_cur FOR 
      'SELECT ' || p_col_to_concat 
  || ' FROM '   || p_table_name 
  || ' WHERE '  || p_key_name || ' = :a'
  || ' ORDER BY :b'
  USING p_key_value, p_col_to_concat;
  LOOP
    FETCH v_cur INTO v_value;
    EXIT WHEN v_cur%NOTFOUND;
      v_string := v_string || v_separator || v_value;
      v_separator := p_separator;
  END LOOP;
  CLOSE v_cur;
  RETURN v_string;
END concatenate;


  SELECT   customer,
           COUNT (CHS_NO) NOV,
           MAX (DECODE (TO_CHAR (RO_DATE, 'MON'), 'JAN', VEHs)) AS "JAN",
           MAX (DECODE (TO_CHAR (RO_DATE, 'MON'), 'FEB', VEHs)) AS "FEB",
           MAX (DECODE (TO_CHAR (RO_DATE, 'MON'), 'MAR', VEHs)) AS "MAR"
    FROM   (SELECT   CUSTOMER,
                     LIC_NO,
                     CHS_NO,
                     RO_DATE,
                     concatenate ('CUSTOMER || LIC_NO',
                                  CUSTOMER || LIC_NO,
                                  'LIC_NO',
                                  'MSS_RETENTION')
                        AS VEHs
              FROM   MSS_RETENTION)
GROUP BY   CUSTOMER;


My output
Customer Nov Jan Feb
800 SUPER WASTE MANAGEMENT PTE LTD 10 YM3365M YM3143L*XD1416Y*XD3642Y

like this for all the months.

Re: CONCATENATE QUERY [message #611784 is a reply to message #611783] Tue, 08 April 2014 22:23 Go to previous messageGo to next message
BlackSwan
Messages: 26766
Registered: January 2009
Location: SoCal
Senior Member
After hundreds of post & ten years here, why bother posting when lacking critical detail?

> as it is not displaying my required result.
I believe you, but why did you not actually show us what the desired results should be?
Since we are NOT mind readers, we don't know what you expect/desire the results to be.

>(ORACLE, 8.1.7.0.0, WINDOWS 2007)
how is it that you have an ancient & obsoleted Oracle version running on a relatively new version of Windows?
Why is it OK to upgrade the OS, but not upgrade the database version?



Re: CONCATENATE QUERY [message #611787 is a reply to message #611784] Wed, 09 April 2014 00:15 Go to previous messageGo to next message
kumarvk
Messages: 214
Registered: July 2004
Senior Member
Hi,

My required output
Customer Nov Jan
800 SUPER WASTE MANAGEMENT PTE LTD 10 YM3365M
FEB
YM3143L*XD1416Y*XD3642Y.

I need the lic no in columnwise according to Jan, Feb, Mar etc. getting the month from RO_date
Re: CONCATENATE QUERY [message #611865 is a reply to message #611787] Wed, 09 April 2014 09:14 Go to previous messageGo to next message
Rayam69
Messages: 43
Registered: May 2012
Member
Hi Kumar,

did you have to take any extra steps to install oracle 8 on windows 2007?
I am trying to test installing oracle 9i on windows7 professional.
Re: CONCATENATE QUERY [message #611873 is a reply to message #611865] Wed, 09 April 2014 09:45 Go to previous messageGo to next message
Michel Cadot
Messages: 68641
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Do NOT hijack a topic with your personal question.
You can click on PM button if you want to ask him something.

Re: CONCATENATE QUERY [message #611876 is a reply to message #611787] Wed, 09 April 2014 09:48 Go to previous messageGo to next message
Michel Cadot
Messages: 68641
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator
kumarvk wrote on Wed, 09 April 2014 07:15
Hi,

My required output
Customer Nov Jan
800 SUPER WASTE MANAGEMENT PTE LTD 10 YM3365M
FEB
YM3143L*XD1416Y*XD3642Y.

I need the lic no in columnwise according to Jan, Feb, Mar etc. getting the month from RO_date


Can you format your output and explain your output.
We can't even know if the first line is headers or part of the result and if it is headers which values are in which columns.

[Updated on: Wed, 09 April 2014 13:30]

Report message to a moderator

Re: CONCATENATE QUERY [message #611884 is a reply to message #611783] Wed, 09 April 2014 10:29 Go to previous messageGo to next message
Lalit Kumar B
Messages: 3174
Registered: May 2013
Location: World Wide on the Web
Senior Member
I see that you have mentioned your Oracle DB version as 8i. If not too much too ask, is it not an outdated version in this 21st century.
I know that upgrading a system is not a developer's call, but you could definitely propose it to your organization.

The reason for saying that is, with latest Oracle DB version, specially 11g qmd above, you could use the string literal technique to build dynamic SQLs without the pain of all those quotes. And using DBMS_OUTPUT during your unit testing, you can easily see whether the SQL formed is syntactically correct or not.

Another thing, with respect to design and implementation, it's always the last option to choose dynamic SQL.
Re: CONCATENATE QUERY - Format text [message #611901 is a reply to message #611876] Wed, 09 April 2014 23:12 Go to previous messageGo to next message
kumarvk
Messages: 214
Registered: July 2004
Senior Member
My required output
Customer.......................... Nov| Jan | Feb
800 SUPER WASTE MANAGEMENT PTE LTD |10| YM3365M | YM3143L*XD1416Y*XD3642Y

Re: CONCATENATE QUERY - Format text [message #611902 is a reply to message #611901] Wed, 09 April 2014 23:14 Go to previous messageGo to next message
kumarvk
Messages: 214
Registered: July 2004
Senior Member
Customer.......................... Nov| Jan | Feb
800 SUPER WASTE MANAGEMENT PTE LTD |10| YM3365M | YM3143L*XD1416Y*XD3642Y
Re: CONCATENATE QUERY - Format text [message #611903 is a reply to message #611902] Wed, 09 April 2014 23:16 Go to previous messageGo to next message
kumarvk
Messages: 214
Registered: July 2004
Senior Member
Customer |NoV |Jan |Feb
800 SUPER WASTE MANAGEMENT PTE LTD |10 |YM3365M |YM3143L*XD1416Y*XD3642Y

Re: CONCATENATE QUERY - Format text [message #611904 is a reply to message #611903] Wed, 09 April 2014 23:25 Go to previous messageGo to next message
kumarvk
Messages: 214
Registered: July 2004
Senior Member
Customer NoV Jan Feb
800 Super Waste 10 YM3365M YM3143L * XD1416Y * XD3642Y

Re: CONCATENATE QUERY - Format text [message #611907 is a reply to message #611904] Thu, 10 April 2014 01:02 Go to previous message
Michel Cadot
Messages: 68641
Registered: March 2007
Location: Nanterre, France, http://...
Senior Member
Account Moderator

Which one of your last 4 required outputs is the actual one?
You used code tags in your first post so you should be able to do it for your output.
Use "Preview" button BEFORE "Post" one to be sure of what you will actually post.

Previous Topic: How to work oracle index
Next Topic: How to return 0 when Inline View is returning NULL
Goto Forum:
  


Current Time: Fri Apr 19 14:23:53 CDT 2024