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 stringSQL> 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
thanksyou 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.
-
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. -
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 suggestif 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: CharlieMackLogic 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.
ThanksOr 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 advanceMy 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
-
Hello Experts, While loading a data from ODS to Cube i am getting this error while executing DTP: " Exceptions in Substep: Rules" Please Help me. Thanks in advance
-
Urgent HELP! need for my Zen touch (20
Right here we go. I bought my zen touch online last year from a well known supplier. Absolutly brilliant mp3 plaey and happy with the value for money i got. The player did freee alot since i got it at inappropiate times eg. When i was on holiday and
-
How to control PNP LDB using personnel are alone
Hi all! Any body can tell me, how control the pnp ldb using personnel area and employee group. bcaz in the standard selection screen it is given as <u>selection.</u> Pers.area/subarea/cost cente : Employee group/subgroup Thx, palani
-
Please what this means?
-
How do I 'quit safari' in order to install adobe flash?
How do I quit safari