Can I swap data columns in SQLLDR

Hello,
I'm new to Oracle and have the following problem: I need to import CVS into my database. I use sqlldr. Works fine so far. But now I want to change the data order of columns in condition to their values.
E.g:
CSV:
ColA;ColB
1;2
1;3
5;2
8;1
Needs to be inserted in a table. But I want to load it so that value in column A is always less than value in column B, otherwise swap it.
Result should look like
1;2
1;3
2;5
1;8
Is this possible with sqlldr? And if, how?
Thank's in advance for any help.
Haiko

Andy Klock wrote:
You are going to love external tables.
See here for examples:
http://www.adp-gmbh.ch/ora/misc/ext_table.html
Then you can do an insert with a case statement:
-- untested psuedocode
insert into dest_table
SELECT
(CASE A < B THEN A 
ELSE B
END ) A,
(CASE B > A THEN B 
ELSE A
END )
FROM ext_tab; Or something like that.
Edited by: Andy Klock on May 12, 2010 5:37 AM -- added code tagsOr even
insert into dest_table
SELECT LEAST(A,B), GREATEST(A,B)
FROM ext_tab;

Similar Messages

  • Trying to insert "second" value in DATE column using SQLLDR ORA-01861

    Don't know suddenly with the same piece of control file the number issue got resolved.
    :30
    :30
    :30
    :30
    :30
    :30
    :30
    :30
    :30
    :30
    :30
    Now I was using for this
    FORECASTED_ASA EXPRESSION "TO_DATE(SYSDATE,':SS')" ...but it's not working
    throwing error like....
    Record 1: Rejected - Error on table "ABC", column FORECASTED_ASA.
    ORA-01861: literal does not match format string
    Record 2: Rejected - Error on table "ABC", column FORECASTED_ASA.
    ORA-01861: literal does not match format string

    SQL> alter session set nls_Date_format = 'DD-MON-YYYY HH24:MI:SS';
    Session altered.
    SQL> select to_date(sysdate,':ss') from dual;
    select to_date(sysdate,':ss') from dual
    ERROR at line 1:
    ORA-01861: literal does not match format string
    SQL> select to_date(':30',':ss') from dual;
    TO_DATE(':30',':SS')
    01-JUL-2011 00:00:30
    SQL> select * from v$version;
    BANNER
    Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
    PL/SQL Release 11.1.0.7.0 - Production
    CORE    11.1.0.7.0      Production
    TNS for Linux: Version 11.1.0.7.0 - Production
    NLSRTL Version 11.1.0.7.0 - ProductionSo it could be
    FORECASTED_ASA EXPRESSION "TO_DATE(':forecaseted_asa',':SS')" Regards
    Raj

  • How to get date prompts from one date column

    i have a requirement where i have to filter the data between two date prompts. i have only one date column and the date in the prompts shuld be selected by calendar.
    i have seen may approaches to do this and i got one where two dummy date columns should be declared in repository and used to define the date prompts.
    but using other methods i could not get the calendar option in prompt.
    but is there any other way to get the prompts with calndar selection without defining the dummy columns in repository
    thanks

    you can do that first select the date column you want to use in dashboard prompt then select another column and in the dashboard prompts then open the fx of the date prompt you first selected copy that and paste it in the second column and in the control section click on calender it will work you can use same date column as two prompts with out creating new column.

  • Cross database join Oracle - SQL server date column - nQSError: 46008

    Hi,
    I am using OBIEE 10.1.3.4.2 and
    I am able to make cross database join between Oracle and SQL server using varchar columns, but I am getting this error:
    nQSError:22024-A comparison is being carried out between noncompatible type when I try to make "foreign key" join between two tables (one from Oracle, second from SQL Server) using number columns (INT, DOUBLE...). It is strange, but I when I make "complex join" on physical layer no error is thrown and everything works fine.
    But I am not able to make join between tables using Date column. Column in Oracle table has DATE datatype, column in SQL server tables has datetimeoffset(7) datatype (example: 2011-07-19 13:14:22.2032605 +02:00). So I tried to cast datetimeoffset(7) to date datatype using "convert(DATE,HappenedOn,120)" - this returns me 2011-07-19 . In this format, BI can show converted date column, I can make filter using this date column, but I am not able to make physical join with Oracle table using this column
    Answer using data from both joined tables gives me this error:
    [nQSError: 46008] Internal error: File .\DataType\SUKeyCompare.cpp, line 875. (HY000)
    Do you have some tips, how to solve this "bug"?

    Parse the command column to get the SSIS package file name may be your only option here.

  • Date columns

    Hi Gurus,
    I am working on Oracle 7.3.4 on Unix. I am having around 500 tables in my database and all of them are having different date formats i.e differnt column name as date format. I want to grab only the date column from the tables. Is ther any sql or pl/sql query through which I can only grab date column in the table.

    Look in user_tab_columns (or all_tab_columns) for the table names and column names where the type is a date.

  • BPS Planning Layout - Data Column issues

    My basic question is:  is it possible to configure a characteristic in the data column such that it contains a range of values, instead of just a single value.  We have requirements to produce a series of comparison columns for things such as "Year-to-Date" (sum of a range of fiscal periods), "Prior 12 Months" (again, sum of a range of periods), and so forth.  Unfortunately, the BPS layout configuration of data columns only allows you to specify a single characteristic value.  If you configure it with a variable that contains the range, the system only uses the LOW value of the range, not the full range.  The ability to provide such comparison columns is critical to our users' ability to see prior information and make a determination of new plan values for the plan year.
    Any thoughts or suggestions on how I should approach this, or alternative approaches to take?

    John,
    This has been an issue with BPS since you can only display data columns of the granularity you specify rather than a range such as YTD similar to what you can do in BW restricted key figures. 
    The work around is to create and store the numbers in 
    1) YTD key figure in say fiscal year current year fiscal period current period and/or
    2) Prior 12 months Key figure and store the number against fiscal year current year fiscal period # or first period period of the year...
    Hope this helps and assign points if you found it useful.
    Mary

  • Using sqlldr when source data column is 4000 chars

    I'm trying to load some data using sqlldr.
    The table looks like this:
    col1 number(10) primary key
    col2 varchar2(100)
    col3 varchar2(4000)
    col4 varchar2(10)
    col5 varchar2(1)
    ... and some more columns ...
    For current purposes, I only need to load columns col1 through col3. The other columns will be NULL.
    The source text data looks like this (tab-delimited) ...
    col1-text<<<TAB>>>col2-text<<<TAB>>>col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    END-OF-RECORD
    There's nothing special about the source data for col1 and col2.
    But the data for col3 is (usually) much longer than 4000 chars, so I just need to truncate it to fit varchar2(4000), right?
    The control file looks like this ...
    LOAD DATA
    INFILE 'load.dat' "str 'END-OF-RECORD'"
    TRUNCATE
    INTO TABLE my_table
    FIELDS TERMINATED BY "\t"
    OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    col1 "trim(:col1)",
    col2 "trim(:col2)",
    col3 char(10000) "substr(:col3,1,4000)"
    I made the column 3 specification char(10000) to allow sqlldr to read text longer than 4000 chars.
    And the subsequent directive is meant to truncate it to 4000 chars (to fit in the table column).
    But I get this error ...
    Record 1: Rejected - Error on table COL3.
    ORA-01461: can bind a LONG value only for insert into a LONG column
    The only solution I found was ugly.
    I changed the control file to this ...
    col3 char(4000) "substr(:col3,1,4000)"
    And then I hand-edited (truncated) the source data for column 3 to be shorter than 4000 chars.
    Painful and tedious!
    Is there a way around this difficulty?
    Note: I cannot use a CLOB for col3. There's no option to change the app, so col3 must remain varchar2(4000).

    You can load the data into a staging table with a clob column, then insert into your target table using substr, as demonstated below. I have truncated the data display to save space.
    -- load.dat:
    1     col2-text     col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    END-OF-RECORD-- test.ctl:
    LOAD DATA
    INFILE 'load.dat' "str 'END-OF-RECORD'"
    TRUNCATE
    INTO TABLE staging
    FIELDS TERMINATED BY X'09'
    OPTIONALLY ENCLOSED BY '"'
    TRAILING NULLCOLS
    col1 "trim(:col1)",
    col2 "trim(:col2)",
    col3 char(10000)
    SCOTT@orcl_11gR2> create table staging
      2    (col1 varchar2(10),
      3       col2 varchar2(100),
      4       col3 clob)
      5  /
    Table created.
    SCOTT@orcl_11gR2> host sqlldr scott/tiger control=test.ctl log=test.log
    SCOTT@orcl_11gR2> select * from staging
      2  /
    COL1
    COL2
    COL3
    1
    col2-text
    col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    1 row selected.
    SCOTT@orcl_11gR2> create table my_table
      2    (col1 varchar2(10) primary key,
      3       col2 varchar2(100),
      4       col3 varchar2(4000),
      5       col4 varchar2(10),
      6       col5 varchar2(1))
      7  /
    Table created.
    SCOTT@orcl_11gR2> insert into my_table (col1, col2, col3)
      2  select col1, col2, substr (col3, 1, 4000) from staging
      3  /
    1 row created.
    SCOTT@orcl_11gR2> select * from my_table
      2  /
    COL1
    COL2
    COL3
    COL4       C
    1
    col2-text
    col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    more-col3-text
    XYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
    1 row selected.

  • How can we show data in rows when it is in Columns........

    I have strucked with a simple but a complex problem.
    I have a Report with data in vertical rows..need of the hour is how can we show that data into column structure.
    here is the table sample which i have in Database..
    Location      chrg_type    Effective_date
    xxxxxxx        xxxx          xx-xx
    thhis is the structure in effective date we have several months in it in a single column i want show the effective date or effective month in various columns instead of a single column.
    my required table is....
                                Effective_date     Effective_date
    Location      chrg_type     xx-xx              xx-xx
    xxxxxxx        xxxx          xx-xx
    any tough heads?????

    Hi Sunil,
    Your 1st problem is that you are going to need one more field to accomplish you goal. What type of data do want under your new date columns?
    Anyway, once you have that you need to move on to how to move the data out into columns based on date.
    Try something like this.
    0_Date = IF DATEPART('m',{tbl.Effective_date}) = DATEPART('m',CurrentDate) AND
    DATEPART('yyyy',{tbl.Effective_date}) = DATEPART('yyyy',CurrentDate)
    THEN {tbl.DataField}
    1_Date = IF DATEPART('m',{tbl.Effective_date}) = DATEPART('m',DATEADD('m', -1, CurrentDate)) AND
    DATEPART('yyyy',{tbl.Effective_date}) = DATEPART('yyyy',DATEADD('m', -1, CurrentDate))
    THEN {tbl.DataField}
    2_Date = IF DATEPART('m',{tbl.Effective_date}) = DATEPART('m',DATEADD('m', -2, CurrentDate)) AND
    DATEPART('yyyy',{tbl.Effective_date}) = DATEPART('yyyy',DATEADD('m', -2, CurrentDate))
    THEN {tbl.DataField}
    ... Repeat this process until you have all of the columns you need, following this format.
    Hope this works for you,
    Jason

  • How can we get Dynamic columns and data with RTF Templates in BI Publisher

    How can we get Dynamic columns and data with RTf Templates.
    My requirement is :
    create table xxinv_item_pei_taginfo(item_id number,
    Organization_id number,
    item varchar2(4000),
    record_type varchar2(4000),
    record_value CLOB,
    State varchar2(4000));
    insert into xxinv_item_pei_taginfo values( 493991 ,224, '1265-D30', 'USES','fever','TX');
    insert into xxinv_item_pei_taginfo values( 493991 ,224, '1265-D30', 'HOW TO USE','one tablet daily','TX');
    insert into xxinv_item_pei_taginfo values( 493991 ,224, '1265-D30', 'SIDE EFFECTS','XYZ','TX');
    insert into xxinv_item_pei_taginfo values( 493991 ,224, '1265-D30', 'DRUG INTERACTION','ABC','TX');
    insert into xxinv_item_pei_taginfo values( 493991 ,224, '1265-D30', 'OVERDOSE','Go and see doctor','TX');
    insert into xxinv_item_pei_taginfo values( 493991 ,224, '1265-D30', 'NOTES','Take after meal','TX');
    select * from xxinv_item_pei_taginfo;
    Item id Org Id Item Record_type Record_value State
    493991     224     1265-D30     USES     fever     TX
    493991     224     1265-D30     HOW TO USE     one tablet daily     TX
    493991     224     1265-D30     SIDE EFFECTS     XYZ     TX
    493991     224     1265-D30     DRUG INTERACTION     ABC     TX
    493991     224     1265-D30     OVERDOSE      Go and see doctor     TX
    493991     224     1265-D30     NOTES     Take after meal     TX
    Above is my data
    I have to fetch the record_type from a lookup where I can have any of the record type, sometime USES, HOW TO USE, SIDE EFFECTS and sometimes some other set of record types
    In my report I have to get these record typpes as field name dynamically whichever is available in that lookup and record values against them.
    its a BI Publisher report.
    please suggest

    if you have data in db then you can create xml with needed structure
    and so you can create bip report
    do you have errors or .... ?

  • How can i change the Format of my DATE column?

    I need to change the date format for a whole column. At present i can do MM-DD-YYYY. I need to change this this to DD-MMM-YYYY.
    I know about the to_date function, i tried to apply it to change the format of my whole column by doing the following.....
    CREATE TABLE "IT220_DATEHOLIDAY"
    "DEPARTID" VarChar(2)NOT NULL ENABLE,
    "HOLCODE" VARCHAR2(2)NOT NULL ENABLE,
    "DEPARDATE" DATE,
    to_date('DATE','DD-MMM-YYYY'), <<<change DATE column to DD-MMM-YYYY
    CONSTRAINT "DATEHOLIDAY_PK" PRIMARY KEY ("DEPARTID") ENABLE
    ORA-00902: invalid datatype <<<<This was the error message i received.
    I am aware that the to_date function is supposed to be used to change strings into a certain format. I guess this means you cant do it with columns? Is there anyway i can format the whole column or do i have to do each string of data entered one by one?
    Thanks in advance!

    Hello Jay,
    I'm not sure you hit the right forum, as this doesn't seem to be a problem with APEX.
    Anyway:
    You can't use that function on a table like that, and as you already suggested, the to_date-function expects a string value.
    It seems you also have a misunderstanding of the basic datatypes in the database. DATE is such a datatype and is stored an internal format you don't need to care about. Each time your request the value, the database will give you a string representation according to either your locale or you give a certain formatting mask.
    The same applies to insert or update operations: you hand in either a variable of type DATE or use a function like to_date to create an "object" of type date.
    You may be interested in reading the documentation of the [url http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/toc.htm]Oracle Database Concepts. The section concerning datatype DATE can be found here:
    http://download.oracle.com/docs/cd/E11882_01/server.112/e16508/tablecls.htm#CBBGJHJC
    An overview of formatting options can be found here:
    http://download.oracle.com/docs/cd/E11882_01/server.112/e17118/sql_elements004.htm#SQLRF00212
    So to answer your question: You would format it as part of your insert operation, taking a string and convert it using to_date.
    -Udo

  • Need help! Can't validate date overlaps for a tabular column

    Hello all,
    The validation I created to validate whether new or updates rows does not overlap with any records in the table isn't working.
    The columns are StartDt and EndDt
    Validation Type: NOT EXISTS
    Validation expresion:
    select 1
        from  sample S
        WHERE S.STARTDT BETWEEN :STARTDT AND :ENDDT
    OR(S.ENDDT BETWEEN :STARTDT AND :ENDDT)
    or (S.STARTDT <= :STARTDT and S.ENDDT >= :ENDDT)
    or (:STARTDT <= S.STARTDT and :ENDDT >= S.ENDDT)
    Error Message:
    Times overlap
    When Buttons pressed
    -Select Button-
    The validation works if a new row or updated row overlaps any existing start and end date records but it doesn't work if I update startdate and end date rows that doesn't overlap existing date times
    Example:
    TABLE DISPLAYS THE FOLLOWING RECORDS
    NAME                   START DATE                      END DATE
    TEST                    1/1/2012                               12/31/2012
    If I update the rows to the following values, I receive an error message (although those values don't overlap any records in the table)
    NAME                   START DATE                      END DATE
    TEST                    6/1/2012                               10/30/2012
    Any ideas? Do I need to change my code?
    Click the link to view the answer to this question. Need help! Can't validate date overlaps for a tabular column
    Message was edited by: CharlieMack

    Logic for date range overlap testing only requires two conditions in the WHERE clause:
    ORACLE-BASE - Overlapping Date Ranges
    WHERE S.STARTDT <= :ENDDT AND S.ENDDT >= :STARTDT -- TRUE for ranges that overlap
    It looks a little odd, but, if you scribble out a 'logic table', it makes sense.
    Condition
    A.start <= B.end
    A.end >= B.start
    A__A B--B
    true
    false
    A__B=A--B
    true
    true
    A__B==B__A
    true
    true
    B--A==B__A
    true
    true
    B--B A__A
    false
    true
    MK

  • How can I load data into table with SQL*LOADER

    how can I load data into table with SQL*LOADER
    when column data length more than 255 bytes?
    when column exceed 255 ,data can not be insert into table by SQL*LOADER
    CREATE TABLE A (
    A VARCHAR2 ( 10 ) ,
    B VARCHAR2 ( 10 ) ,
    C VARCHAR2 ( 10 ) ,
    E VARCHAR2 ( 2000 ) );
    control file:
    load data
    append into table A
    fields terminated by X'09'
    (A , B , C , E )
    SQL*LOADER command:
    sqlldr test/test control=A_ctl.txt data=A.xls log=b.log
    datafile:
    column E is more than 255bytes
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)
    1     1     1     1234567------(more than 255bytes)

    Check this out.
    http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96652/ch06.htm#1006961

  • Can we concatenate 2 columns of datafile into one column in sql loader

    Hi,
    Can we concatenate 2 columns of datafile into one column in sql loader?
    like
    Suppose there are two field in data file
    column1 - lastname value tiger
    column2 - firstname value scott
    Required result
    sould be concatenate of the two field into one database coulmn
    like name and value should be scott tiger.
    Thanks

    Or try this...
    My input file
    1,KARTHICK,PATTABIRAMAN,SOFTWARE
    2,VIJAY,RENGANATHAN,FINANCE
    3,VIMAL,KANTH,SALESAnd my control file.
    LOAD DATA
    INFILE 'EmpDetail.txt'
    BADFILE 'EmpDetail.bad'
    DISCARDFILE 'EmpDetail.dsc'
    INTO TABLE "EMPDETAIL"
    FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS     
      (NO,
      NAME1 BOUNDFILLER,
      NAME ":NAME1||' '||:NAME",
      DEPT) My table is.
    SQL> create table empdetail(no integer, name varchar2(50), dept varchar2(50))
      2  /
    Table created.Then i loaded the data.
    D:\karthick\Akiva\Look up\Akiva\Address Look Up>sqlldr sysadm/sysadm@akivanew empdetail.ctl
    SQL*Loader: Release 9.2.0.1.0 - Production on Mon Sep 15 12:23:42 2008
    Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
    Commit point reached - logical record count 2
    Commit point reached - logical record count 3And the output is
    SQL> select * from empdetail
      2  /
            NO NAME                                               DEPT
             1 KARTHICK PATTABIRAMAN                              SOFTWARE
             2 VIJAY RENGANATHAN                                  FINANCE
             3 VIMAL KANTH                                        SALESThanks,
    Karthick.

  • Modifying date column??

    Hi,
    We ran into a situation where the application populates dates in the table columns with wrong values.
    All the months are set to deault January (1) and the actual month value was put in the minute.
    I just need to swap month-minute values in the date column, i.e minute with month and month with minute
    Ex: 1-22-1998 4:08:00 AM should be replace with 08-22-1998 4:01:00 AM
    It would be most helpful if any one can provide the easiest update query that can be accomplish this?

    Hi,
    We have 50,298 rows to get updated. How to handle all the rows with a generic query.
    get the date in new format and populate in a temp table like dual and update it in the destination table.
    Is that your query say??
    following query does not work??
    select to_date(received_date,'MI-DD-YYYY HH:MM:SS AM') dt from table1;
    Message was edited by:
    user522347

  • How to get Week,Month and Year details from a date column

    Hi frenz,
    I've a column like tran_date which is a date column..... I need the next week details based on this column and so on...
    I need month and year details as well based on this tran_date column.... can any one tell me how...
    Thanks in advance

    My example for objects:
    create or replace type date_object as object
      centure number,
      year    number,
      month   number,
      day     number,
      hour    number,
      minute  number,
      second  number,
      daypart number,
      week    number,
      constructor function date_object(p_dt date)
        return SELF as result
    create or replace type body date_object is
      constructor function date_object(p_dt date)
        return SELF as result
      as
      begin
        SELF.centure:= trunc(to_char(p_dt,'YYYY')/100);
        SELF.year:=    to_char(p_dt,'YYYY');
        SELF.month:=   to_char(p_dt,'MM');
        SELF.day:=     to_char(p_dt,'DD');
        SELF.hour:=    to_char(p_dt,'HH24');
        SELF.minute:=  to_char(p_dt,'MI');
        SELF.second:=  to_char(p_dt,'SS');
        SELF.daypart:= p_dt-trunc(p_dt,'DD');
        SELF.week:=    to_char(p_dt,'IW');
        return;
      end;
    end;
    select date_object(sysdate),
           date_object(sysdate).year
    from dual;Regards,
    Sayan M.

Maybe you are looking for