Invalid number error when calculating with sysdate
Hello - I am getting invalid number error for query below:
SELECT *
FROM
trkg
WHERE
trkg.tran_type=500
AND
trkg.mod_date_time>sysdate-0.5
I am not sure what is wrong with above query. Strange part is that it executes fine in one environmnet and returns 'invalid number' error in other environmnet? Please help me find missing setting.
more information:
Table1: LOCN_HDR with field locn_brcd and locn_id
locn_brcd locn_id
26001A 0000086
26002A 0000087
26001B 0000088
Table2: PICK_LOCN with field LOCN_ID
locn_id
0000086
0000087
0000088
Table3: TRKG with field from_locn and mod_date_time (this is timestamp field)
from_locn mod_date_Time
0000086 29-MAY-13 10.09.23.000000000 AM
0000087 29-MAY-13 10.11.48.000000000 AM
0000088 31-MAY-13 04.07.21.000000000 PM
Now I combine Table1 and Table3
select * from appwms.locn_hdr lh
join
(SELECT lh.locn_brcd,trkg.mod_Date_Time from appwms.trkg
join appwms.locn_hdr lh
on trkg.FROM_LOCN = lh.LOCN_ID
where
trkg.TRAN_TYPE = 500
and trkg.mod_Date_time>sysdate-5
) trkg1 on lh.locn_brcd=trkg1.locn_brcd
-- returns values correctly
Now when I join another table to above (ie table 2), it returns 'invalid number'
select * from appwms.locn_hdr lh
join
(SELECT lh.locn_brcd,trkg.mod_Date_Time from appwms.trkg
join appwms.locn_hdr lh
on trkg.FROM_LOCN = lh.LOCN_ID
where
trkg.TRAN_TYPE = 500
and trkg.mod_Date_time>sysdate-5
) trkg1 on lh.locn_brcd=trkg1.locn_brcd
join
(select pld.locn_id,lh.locn_brcd
from APPWMS.PICK_LOCN PLD join appwms.locn_hdr lh
on pld.locn_id = lh.LOCN_ID ) picklocn on picklocn.locn_brcd=lh.locn_brcd
why are rows returned with one join? when i have more than one join why does it return error 'invalid number'.
Similar Messages
-
ORA-01722: invalid number error when trying to pass a list of values
Gurus
We are using a function like so
The usage for the function below is
Select fn_st_bb_nm_uc (‘1232131312, 123213312’) from dual;
SQL> /
Select fn_st_bb_nm_uc ('1232131312, 123213312') from dual
ERROR at line 1:
ORA-01722: invalid number
It’s giving an invalid number error. When we pass one value it is working fine but when we pass a string of values it gives this error. I have opened an SR around this but would greatly appreciate your help
Acc_blackbar is the table and acc_blkbr_id is of type number.
FUNCTION fn_st_bb_nm_uc (pBB_ID_LIST VARCHAR2)
RETURN VARCHAR2 IS
vspcm_typ_nm_uc VARCHAR2 (2000);
CURSOR stname
IS
SELECT distinct st.spcm_typ_nm_uc
FROM
acc_blackbar abb,
acc_specimen_type ast, acc_procedure apr,
acc_specimen_part asp,
specimen_type st, procedure pr,
proc_proc_family ppf
WHERE abb.ACC_BLKBR_ID = apr.ACC_BLKBR_ID
AND apr.ACC_SPCM_PART_ID = asp.ACC_SPCM_PART_ID
AND asp.ACC_SPCM_TYP_ID = ast.ACC_SPCM_TYP_ID
AND ast.ACC_SPCM_TYP_SPCM_TYP_ID = st.SPCM_TYP_ID
AND apr.procdr_id = pr.PROCDR_ID
AND pr.PROCDR_ID = ppf.PROCDR_ID
AND abb.acc_blkbr_id in (pBB_ID_LIST) ;
BEGIN
DBMS_OUTPUT.PUT_LINE(' BB LIST : ' || pBB_ID_LIST);
FOR st IN stname
LOOP
vspcm_typ_nm_uc := vspcm_typ_nm_uc || ',' || st.spcm_typ_nm_uc;
END LOOP;
vspcm_typ_nm_uc := SUBSTR (vspcm_typ_nm_uc, 2);
RETURN vspcm_typ_nm_uc;
END;This ask tom thread covers multiple solutions:
[http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:210612357425|http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:210612357425] -
Invalid number error when using case when
I have table called NATIONAL_RARE_ECOSYSTEMS which has 1 column called TEST_COLUMN (data type: varchar2):
TEST_COLUMN
rare ecosystem
rare
0
0
(null)
(null)
what I want is a query which will add a column called NRE_SCORE which will give each row instance a score of 0 if it null.
If it is 0 then score should be 0.
If the row contains any text then score should be 1
I have written the query:
SELECT
(CASE WHEN test_column is null THEN 0
WHEN test_column = 0 THEN 0
WHEN test_column > 0 THEN 1
END) AS NRE_SCORE
FROM NATIONAL_RARE_ECOSYSTEMS;
I get the error message:
ORA-01722: invalid number
01722. 00000 - "invalid number"
I think this is because on the 2nd and 3rd line I'm trying to do arithmetic on a column which is varchar2 which I know I cant do.
How do I write a query which says: if the row contains text then give score of 1?
I'm using oracle 11g.Hi,
993451 wrote:
I have table called NATIONAL_RARE_ECOSYSTEMS which has 1 column called TEST_COLUMN (data type: varchar2):
TEST_COLUMN
rare ecosystem
rare
0
0
(null)
(null)
what I want is a query which will add a column called NRE_SCORE which will give each row instance a score of 0 if it null.
If it is 0 then score should be 0.
If the row contains any text then score should be 1Any text other than '0', you mean. I assume it doesn't matter if that text happens to be all digits, such as '9876', or something with no digits, such as 'rare'.
I have written the query:
SELECT
(CASE WHEN test_column is null THEN 0
WHEN test_column = 0 THEN 0
WHEN test_column > 0 THEN 1
END) AS NRE_SCORE
FROM NATIONAL_RARE_ECOSYSTEMS;
I get the error message:
ORA-01722: invalid number
01722. 00000 - "invalid number"
I think this is because on the 2nd and 3rd line I'm trying to do arithmetic on a column which is varchar2 which I know I cant do.You're actually not doing any arithmetic, but you are comparing your VARCHAR2 column to a NUMBER, so it tries to convert the string to a NUMBER, and that's why you get the ORA-01722 error.
>
How do I write a query which says: if the row contains text then give score of 1?
I'm using oracle 11g.Here's one way:
SELECT CASE
WHEN NVL (test_column, '0') = '0'
THEN 0
ELSE 1
END AS nre_score
, ... -- you must want other columns, too
FROM national_rare_ecosystems
;Since you don't really care about the numeric value, don't use NUMBERs anywhere; stick with VARCHAR2s, such as '0'.
I hope this answers your question.
If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only), and also post the results you want from that data.
Point out where the query above is getting the wrong results, and explain, using specific examples, how you get those results from the sample data in those palces.
See the forum FAQ {message:id=9360002} -
Invalid number error when using external table
Hello.
I have a problem with creating an external table with number field.
My txt file looks like:
11111|text text|03718
22222|text text text|04208
33333|text|04215
I try to create external table like:
create table table_ex (
id varchar2(5),
name varchar2(100),
old_id number(5))
organization external (Type oracle_loader default directory dir
access parameters(
RECORDS DELIMITED BY NEWLINE
fields terminated by '|'
(id, name, old_id))
location ('file.txt'));
When i create the table and run select i get this in log file:
Field Definitions for table TABLE_EX
Record format DELIMITED BY NEWLINE
Data in file has same endianness as the platform
Rows with all null fields are accepted
Fields in Data Source:
ID CHAR (255)
Terminated by "|"
Trim whitespace same as SQL Loader
NAME CHAR (255)
Terminated by "|"
Trim whitespace same as SQL Loader
OLD_ID CHAR (255)
Terminated by "|"
Trim whitespace same as SQL Loader
error processing column OLD_ID in row 1 for datafile
/dir/file.txt
ORA-01722: invalid number
Whats the problem?
Any idea?
Thanks
Message was edited by:
DejanHTry this:
create table table_ex
id varchar2(5),
name varchar2(100),
old_id number
organization external
(Type oracle_loader default directory dir access parameters
( RECORDS DELIMITED BY NEWLINE fields terminated by '|'
(id CHAR(5),
name CHAR(100),
old_id CHAR(5)
location ('file.txt')
I have removed the length of Number field and added length in characters later
Aalap Sharma :)
Message was edited by:
Aalap Sharma -
ORA-01722: invalid number error when comparing varchar and number
Hi,
We are upgrading our databases to 10g and have issue with the below query
SELECT VALUE FROM table1 WHERE SUBSTR (VALUE, 10) = 1.
In table1, VALUE is the column name and it will have data ending with number. ex: SIGNATURE1, SIGNATURE2, SIGNATURE3, SIGNATURE4....SIGNATURE9.
As output of substr is varchar, Is comparing it with number throwing the error?
If so, the same query is working perfect in another 10g database which we migrated into.
Please help.
Thanks,
MadhuriI think its data issue. may be some data is defected where string after 10th place contains non numeric character and you are trying to compare it with 1.
My test
Case 1
Below code works fine, since all 10th place characters are digits, so can be compared with 1
with c as
(select 'SIGNATURE1' n from dual union all
select 'SIGNATURE2' from dual union all
select 'SIGNATURE3' from dual union all
select 'SIGNATURE9 ' from dual )
select n,substr(n,10) from c where substr(n,10)=1
Case 2
with c as
(select 'SIGNATURE1' n from dual union all
select 'SIGNATURE2' from dual union all
select 'SIGNATURE3' from dual union all
select 'SIGNATURE9a' from dual ) -------non numeric character
select n,substr(n,10) from c where substr(n,10)=1
This query shows error because , after 10th place there exists a non numeric character -
Invalid number error when trying to convert a varchar2 to a number.
I need to extract the middle four numbers from a varchar2(12) and then convert it to a number. The middle four are numbers but the first four can have letters. I've tried
TO_NUMBER(substr(wptk.ext_wo_num,5,4))
TO_NUMBER(LPAD(wptk.ext_wo_num,5,4))
substr(TO_NUMBER(wptk.ext_wo_num) ,5,4)
cast as number
I need to get rid of any 0 that are at the beginning of the four numbers. Some of the data has no 0 and some can have up to three 0 at the beginning. Is there a way to do that?
thanks.user10426897 wrote:
I came back with 56 rows that look like this 1127-0651-E1. I am trying to translate an ingres view into Oracle that has this in the select statement: INT4(LEFT(TRIM(RIGHT(wptk.ext_wo_num,8)),4))You could use regular expressions...
SQL> with t as (select '065101412354' as num from dual union all
2 select '065106523237' from dual union all
3 select '065206523238' from dual union all
4 select '065606542356' from dual union all
5 select '080101410218' from dual union all
6 select '080102520218' from dual union all
7 select '080106020218' from dual union all
8 select '080201120219' from dual union all
9 select '080601111214' from dual union all
10 select '080801351216' from dual union all
11 select '080802511216' from dual union all
12 select '10000133013' from dual union all
13 select '10000133SC3' from dual union all
14 select '10000133SP4' from dual union all
15 select '10000211011' from dual union all
16 select '10000241011' from dual union all
17 select '10000601S29' from dual union all
18 select '10000601SC1' from dual union all
19 select '10000601SH2' from dual union all
20 select '10000601SP2' from dual union all
21 select '10000602A11' from dual union all
22 select '10000602A50' from dual union all
23 select '10000602A54' from dual union all
24 select '10000602A59' from dual union all
25 select '10000602C06' from dual union all
26 select '10000602E67' from dual union all
27 select '10000602M00' from dual union all
28 select '10000602M01' from dual union all
29 select '10000602M07' from dual union all
30 select '1127-0651-E1' from dual)
31 --
32 select num, to_number(regexp_replace(num,'^.{4}-?([0-9]{4}).*$','\1')) as num_num
33 from t
34 /
NUM NUM_NUM
065101412354 141
065106523237 652
065206523238 652
065606542356 654
080101410218 141
080102520218 252
080106020218 602
080201120219 112
080601111214 111
080801351216 135
080802511216 251
10000133013 133
10000133SC3 133
10000133SP4 133
10000211011 211
10000241011 241
10000601S29 601
10000601SC1 601
10000601SH2 601
10000601SP2 601
10000602A11 602
10000602A50 602
10000602A54 602
10000602A59 602
10000602C06 602
10000602E67 602
10000602M00 602
10000602M01 602
10000602M07 602
1127-0651-E1 651
30 rows selected.
SQL> -
Invalid number error for bind dialog
Oracle SQL Developer version 1.1.2.25 BUILD MAIN-25.79
Running under WinXP
Issue description:
We get an invalid number error when bind variable filled with an enter in the bind dialogIt is hard to say what is causing your problem without the specifics (ie query and value entered for the bind variable). Try running the same statement with the value of the bind variable in place of the bind variable (ie instead of running "select * from dual where dummy = :var" with a value of 'x' for :var, run "select * from dual where dummy = 'x'"). If you get the same error, then it is not an issue with the use of bind variables.
Be aware that currently you cannot define the data type of bind variables (unlike TOAD, etc) and they are all treated as character values. I wouldn't have thought that this would cause you problem unless you are using a bind variable to restrict a numeric column to a specific value and you are entering a non-numeric bind (ie "select * from people where person_id = :id" and using 'xyz' as the value for :id). -
Invalid Number Error in IR search bar.
Hi,
I am getting an invalid number error when i put a value in search bar without selecting the column name.
I followed ' "Invalid number" error using Interactive Report search on collection' thread and accordingly
1) Purged User preferences and session state.
2) Cleared browser settings and cache.
3) Deleted old region and Created a new region on the page with the same query.
If I select a column and search it works fine but when I just give an arrangement id which looks like 'ARR12345' directly in search bar it throws Invalid Number.
This is working perfectly fine in other environments which is replica of this one.
I also ran Apex util function to remove sort preferences.
Also my report is a very simple report like select * from a,b where a.id = b.id.
Please help me. This is a production issue.
Thanks a lot in advance.
Regards
Garima
Edited by: 860249 on Nov 4, 2011 11:40 AMUPDATE SET as = '1', ad = '1', co = '1', pr = '1', date = localtimestamp, lus = 'username'SELECT * FROM sys.v_$reserved_words;
SQL> create table test1(as varchar2(10));
create table test1(as varchar2(10))
ERROR at line 1:
ORA-00904: : invalid identifier
SQL> create table test1(sno number, date date);
create table test1(sno number, date date)
ERROR at line 1:
ORA-00904: : invalid identifier
SQL> create table test1("as" varchar2(10));
Table created.
SQL>
SQL> create table test2(sno number, "date" date);
Table created.
SQL> desc test1
Name Null? Type
as VARCHAR2(10)
SQL> desc test2
Name Null? Type
SNO NUMBER
date DATE
SQL> -
Case When Statement and ORA:01722 Invalid number error
Hi folks, I have posted this under another heading as well under E-business suite so apologies if some you have already seen it but I would really appreciate some help on this one. Any suggestions are most welcome.
We are trying to put together a calculation that returns the number of days absent an individual has had in a given time period. We need to cater for those absences that started before the period and are closed during it, absence that start during the period and end after it, and those that open and close within it.
The period is always a rolling 6 months from sysdate.
This is the calc we have come up with so far which works for some people but we get the invalid number error if the absence includes a half day - so 0.5, 1.5,etc.
This is probably over complicated but we are not techie at all so are learning as we go!
We are using the HRMS - Administration - Oracle Human Resources (Core) business area in 10G and the Absence Attendance and Person folders.
SUM(TO_NUMBER(NVL(( CASE WHEN Absence Attendance.Actual Start Date < TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') THEN ( CASE WHEN Absence Attendance."Actual End Date" > SYSDATE THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) END ) END ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( Absence Attendance.Duration Days ) END ) END ) END ) END ) END ),( DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") )),'999999990D00'))Hi,
It could be that this is because you are using SYSDATE which contains the time as a fraction rather than TRUNC(SYSDATE) which just contains the current time. It could be that your working_dates_between raises this error.
However, your formula is far more complicated than it needs to be.
Firstly, you want to look at the date window ADD_MONTHS(TRUNC(SYSDATE), -6) to TRUNC(SYSDATE). Then you want to look at the portion of the absence that falls in the date window. This is GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6)) to LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE)). You may need to add 1 to the absence end date because this is the last day of their absence rather than the date they return. It depends how you calculate the days between the start and end
date of the absence. You can create calculations for the start and end date of the absences within the 6 months time window. Create calculation AbsenceStart as
GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6))
and AbsenceEnd as
LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE))
Then you need to only pick up absence that a part of the absence in your 6 month date window. You can use a condition in the workbook or a condition in a case statement to do this. You then need to calculate the difference between these dates and SUM all the values.
SUM(CASE WHEN AbsenceEnd >= AbsenceStart THEN WORKING_DAYS_BETWEEN(AbsenceStart, AbsenceEnd) END)
That's it. Not so complicated after all.
Rod West -
Case When Statement and ORA:1722 Invalid number error
Sorry I posted this in the wrong forum - I have the answer now
Cheers
HELP!!!
We are trying to put together a calculation that returns the number of days absent an individual has had in a given time period. We need to cater for those absences that started before the period and are closed during it, absence that start during the period and end after it, and those that open and close within it.
The period is always a rolling 6 months from sysdate.
This is the calc we have come up with so far which works for some people but we get the invalid number error if the absence includes a half day - so 0.5, 1.5,etc.
This is probably over complicated but we are not Techie at all so are learning as we go! We are using the HRMS - Administration - Oracle Human Resources (Core) business area in 10G and the Absence Attendance and Person folders.
SUM(TO_NUMBER(NVL(( CASE WHEN Absence Attendance.Actual Start Date < TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') THEN ( CASE WHEN Absence Attendance."Actual End Date" > SYSDATE THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) END ) END ) ELSE ( CASE WHEN ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) END ) END ) END ) IS NULL THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),SYSDATE) ) ELSE ( CASE WHEN TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY') >= Absence Attendance.Actual Start Date THEN ( WORKING_DAYS_BETWEEN(TO_DATE(ADD_MONTHS(SYSDATE,-6),'DD-Mon-YYYY'),Absence Attendance."Actual End Date") ) ELSE ( CASE WHEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") ) IS NULL THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( CASE WHEN SYSDATE <= Absence Attendance."Actual End Date" THEN ( WORKING_DAYS_BETWEEN(Absence Attendance.Actual Start Date,SYSDATE) ) ELSE ( Absence Attendance.Duration Days ) END ) END ) END ) END ) END ),( DAYS_BETWEEN(Absence Attendance.Actual Start Date,Absence Attendance."Actual End Date") )),'999999990D00'))
Edited by: CPearce on Sep 25, 2008 8:03 AMHi,
It could be that this is because you are using SYSDATE which contains the time as a fraction rather than TRUNC(SYSDATE) which just contains the current time. It could be that your working_dates_between raises this error.
However, your formula is far more complicated than it needs to be.
Firstly, you want to look at the date window ADD_MONTHS(TRUNC(SYSDATE), -6) to TRUNC(SYSDATE). Then you want to look at the portion of the absence that falls in the date window. This is GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6)) to LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE)). You may need to add 1 to the absence end date because this is the last day of their absence rather than the date they return. It depends how you calculate the days between the start and end
date of the absence. You can create calculations for the start and end date of the absences within the 6 months time window. Create calculation AbsenceStart as
GREATEST(Absence Attendance.Actual Start Date, ADD_MONTHS(TRUNC(SYSDATE), -6))
and AbsenceEnd as
LEAST(NVL(Absence Attendance."Actual End Date",TRUNC(SYSDATE)), TRUNC(SYSDATE))
Then you need to only pick up absence that a part of the absence in your 6 month date window. You can use a condition in the workbook or a condition in a case statement to do this. You then need to calculate the difference between these dates and SUM all the values.
SUM(CASE WHEN AbsenceEnd >= AbsenceStart THEN WORKING_DAYS_BETWEEN(AbsenceStart, AbsenceEnd) END)
That's it. Not so complicated after all.
Rod West -
Invalid number error with Form on table page
We used the "Form on Table..." wizard to create a simple page to update the SCOTT.EMP table. When we submit the page we get the ORA-01722: invalid number error. When I view the data in the WWV_FLOW_DATA view in the FLOWS_010500 schema, I can see all the data from our form in long format with the actual values that were submitted. But I can not track down where this error is coming from.
James,
What data did you enter in each field? Could it be as simple as you tried to enter character data into the deptno column?
Sergio -
Error Invalid Number message when sending text
Ever since I upgraded to an iPhone 5s I get an Error Invalid Number message when sending a text to a phone number that used to work just fine from my 4s. In fact I can receive a text from this number but when I try to reply to that text I get the error message again.
I deleted the contact info in case there was something broken there and I'm trying it with just the raw phone number but without any luck. What can I do? It's my boss's number so it's important I fix this problem. All other contacts and texts are working just fine, it's just this one phone, a Samsung galaxy on T-mobile if that helps.I am having the same exact issue with my Nokia Lumia 920 Windows phone. I was texting my son this morning when one text immediately returned a "+1 (112) 161-1611 Error Invalid Number. Please re-send u sing a vlid 10 digit mobile number" message. His contact info looked fine, but I edited it, re-saved it and tried texting again. Same result - except the number reported in the error message showed 2 "1s" in front of his mobile number. I was able to text my wife a couple of times to report this to her and then it happened with her number in exactly the same manner. I am still able to text people I work with - so this leads me to believe it has something to do with phone numbers that have been saved outside of my corporate contact list. I will be monitoring this posting to see if there is a fix.
-
ORA-01722: invalid number error with Bulk collect
Hi ,
I have been using the script to delete old seasonal data from my application DB tables. The stored procedure has been created successfully but when i try to run the proc it has been throwing 'ORA-01722: invalid number' exception at line 'FETCH C1_CUR BULK COLLECT INTO C1_TYPE_VAR LIMIT v_bulklimit;'.
Could you please help me here?
Below is the stored proc:
CREATE OR REPLACE PROCEDURE clean_old_season_data(P_SEASON VARCHAR2) AS
CURSOR C1_CUR IS SELECT ROWID RID,pro.* FROM PROPS pro where pro.ITEMPK IN
(SELECT sve.pk FROM SAVEDVALUEENTRY sve WHERE sve.p_parent IN
(SELECT s.pk FROM SAVEDVALUES s WHERE s.P_MODIFIEDITEM IN
(SELECT a.PK
FROM products a
WHERE a.p_season IN (select s.pk from Seasons s where s.P_code=P_SEASON)
) ) ) and rownum<5;
CURSOR C2_DEL IS SELECT RID FROM PROPS_HISTORY;
TYPE C1_TYPE IS TABLE OF C1_CUR%ROWTYPE;
C1_TYPE_VAR C1_TYPE;
TYPE C2_TYPE IS TABLE OF UROWID;
C2_TYPE_VAR C2_TYPE;
ex_dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(ex_dml_errors, -24381);
l_error_count NUMBER;
err_num NUMBER;
err_msg VARCHAR2 (300);
COMMIT_VARIABLE PLS_INTEGER:=0;
v_bulklimit NUMBER:=2;
BEGIN
/*------------------ Data Selection and INSERTION IN HISTORY TABLE ---------------------------------------*/
OPEN C1_CUR;
LOOP
DBMS_OUTPUT.put_line('Cursor opend now in loop');
FETCH C1_CUR BULK COLLECT INTO C1_TYPE_VAR LIMIT v_bulklimit;//ERROR OCCURS HERE
DBMS_OUTPUT.put_line('Cursor count is'|| C1_TYPE_VAR.COUNT);
FORALL I IN 1..C1_TYPE_VAR.COUNT SAVE EXCEPTIONS
INSERT INTO PROPS_HISTORY VALUES C1_TYPE_VAR(I);
COMMIT_VARIABLE := COMMIT_VARIABLE + v_bulklimit;
DBMS_OUTPUT.put_line('Commit variable'|| COMMIT_VARIABLE.COUNT);
IF COMMIT_VARIABLE = v_bulklimit THEN
COMMIT;
COMMIT_VARIABLE := 0;
END IF;
EXIT WHEN C1_CUR%NOTFOUND;
END LOOP;
DBMS_OUTPUT.put_line('Cursor closed now in loop and data inserted in history table');
CLOSE C1_CUR;
/*------------------ Data Selection and DELETION IN Live TABLE ---------------------------------------*/
COMMIT_VARIABLE := 0;
OPEN C2_DEL;
LOOP
FETCH C2_DEL BULK COLLECT INTO C2_TYPE_VAR LIMIT 2;
FORALL I IN 1..C2_TYPE_VAR.COUNT SAVE EXCEPTIONS
DELETE FROM PROPS WHERE ROWID = C2_TYPE_VAR(I);
COMMIT_VARIABLE := COMMIT_VARIABLE + 2;
IF COMMIT_VARIABLE = 2 THEN
COMMIT;
COMMIT_VARIABLE := 0;
END IF;
EXIT WHEN C2_DEL%NOTFOUND;
END LOOP;
CLOSE C2_DEL;
END;Although there are many things which should not have been done in the posted code, I could not find any reason why the Invalid number error should occur at the Fetch clause.
I would suggest you to Insert into Table by providing the Order of Columns i.e. Insert into table (col1, ... colN) values (coll(i).col1...col(i).colN);
I tested below code and it did not give any errors.
drop table test_table;
create table test_Table
rid varchar2(100),
emp_id number(5),
fname varchar2(20),
lname varchar2(50)
set serveroutput on;
declare
cursor c_cur is
select rowid rid, e.*
from employees e
where rownum < 10;
type typ_cur is table of c_cur%rowtype;
typ typ_cur;
l_bulk_limit number := 5;
begin
open c_cur;
loop
fetch c_cur bulk collect into typ limit l_bulk_limit;
dbms_output.put_line('Collection Count :: ' || typ.count);
forall i in 1..typ.count --typ.first..typ.last
insert into test_Table (rid, emp_id, fname, lname) values (typ(i).rid,typ(i).employee_id,typ(i).first_name,typ(i).last_name);
dbms_output.put_line('Processed ' || l_bulk_limit || ' records.');
exit when c_cur%notfound;
end loop;
commit;
end;
select * from test_table;PS:- 1. When you are processing only 4 Records, then why are you breaking them in 2 Loops?
2. Why Commit every time you are processing a DML? Why not maintain an Error Flag and Rollback the Transaction as soon as error is encountered?
3. Use "{code}" (Exclude Double Quotes) to format the code. I am not sure if works.
Regards,
P. -
Invalide identifier error, when use subselect
Hi all,
I got "ORA-0094: sp.spriden_pidm invalid identifier "error when runing the following query.
select (select t.name from
(select rownum row_number, s.spriden_last_name name
from spriden s
where s.spriden_pidm = sp.spriden_pidm) t
where t.row_number = 1) last_name
from spriden sp
where sp.spriden_pidm = 70105;
Any one has an idea why this is happening?
ThanksUnless I am missing something here, this looks like a straight pivot query to me.
SQL> with my_test AS (SELECT 1 id, 'June' contact_name FROM dual UNION ALL
2 SELECT 1, 'Email' FROM dual UNION ALL
3 SELECT 1, 'Mark' FROM dual UNION ALL
4 SELECT 2, 'Tom' FROM dual),
5 my_test_2 AS (SELECT 1 id, trunc(sysdate) act_date FROM dual UNION ALL
6 SELECT 1, trunc(sysdate-1) FROM dual UNION ALL
7 SELECT 2, trunc(sysdate-1) FROM dual)
8 SELECT id, act_date,
9 MAX(DECODE(rn, 1, contact_name)) nc1,
10 MAX(DECODE(rn, 2, contact_name)) nc2,
11 MAX(DECODE(rn, 3, contact_name)) nc3
12 FROM (SELECT m.id, contact_name, act_date,
13 ROW_NUMBER() OVER (PARTITION BY m.id
14 ORDER BY contact_name) rn
15 FROM my_test m, my_test_2 m2
16 WHERE m.id = m2.id and
17 m2.act_date = trunc(sysdate-1))
18 GROUP BY id, act_date;
ID ACT_DATE NC1 NC2 NC3
1 11-Sep-2008 Email June Mark
2 11-Sep-2008 TomAssuming that you have a known maximum number of possible values in my_test for a given id this should work. You may need to use something other than the contact_name in the order by in the row_number function if you require the values in specific columns, but given your sample data, I have no idea what that might be.
John -
Recieving ORA-01722 invalid number error while creating a materialized view
Hi,
I am receiving a ORA-01722 invalid number error while creating a materialized view. when run the select statement of the view i don't get any error, but when i use the same select statement to create a materialized view i receive this error. Could any please help in resolving this error. Here is the code i am using to create a materialized view.
CREATE MATERIALIZED VIEW MV_EBS_CH_CLOSED
REFRESH FORCE ON DEMAND
AS
SELECT DISTINCT kr.request_id, org.org_unit_name,
ebs_ch_ticket_type (kr.request_id) ticket_type,
DECODE
(kr.status_code,
'CLOSED_SUCCESS', kr.last_update_date,
'IN_PROGRESS', (SELECT MAX (start_time)
FROM ebs_ch_datastore ecd1
WHERE kr.request_id = ecd1.request_id
AND workflow_step_name =
'Final BA Review and Deployment Exit Criteria')
) closed_date,
substr(krhd.visible_parameter12,1,10) siebel_start_date,
kr.creation_date itg_start_date
FROM kcrt_requests kr,
kcrt_request_types krt,
kcrt_req_header_details krhd, kcrt_request_details krd1,
(SELECT koum.user_id user_id,
DECODE (koup.org_unit_name,
'IT Implementations', 'CHS - Service Management BA',
koup.org_unit_name
) org_unit_name
FROM krsc_org_unit_members koum, krsc_org_units koup
WHERE 1 = 1
AND 'Y' = koup.enabled_flag
AND koum.org_unit_id = koup.org_unit_id
AND EXISTS (
SELECT 'X'
FROM krsc_org_units kouc
WHERE koup.org_unit_id = kouc.org_unit_id
START WITH kouc.parent_org_unit_id =
ANY (SELECT org_unit_id
FROM krsc_org_units krsc_org_units1
WHERE 'Clearinghouse' =
org_unit_name)
CONNECT BY kouc.parent_org_unit_id =
PRIOR kouc.org_unit_id)
UNION
SELECT kou.manager_id user_id,
DECODE
(kou.org_unit_name,
'IT Implementations', 'CHS - Service Management BA',
kou.org_unit_name
) org_unit_name
FROM krsc_org_units kou
WHERE 'Y' = kou.enabled_flag
START WITH kou.parent_org_unit_id =
(SELECT org_unit_id
FROM krsc_org_units krsc_org_units2
WHERE 'Clearinghouse' = org_unit_name)
CONNECT BY kou.parent_org_unit_id = PRIOR kou.org_unit_id) org
WHERE krt.request_type_id = kr.request_type_id
AND krt.request_type_name IN ('Bug Fix', 'IT Enhancement')
and kr.REQUEST_ID = krd1.request_id
and krd1.batch_number = 1
AND kr.request_id = krhd.request_id
AND org.user_id in (krd1.parameter4, krd1.parameter5, krd1.parameter7)
AND ( 'CLOSED_SUCCESS' = kr.status_code
OR 'IN_PROGRESS' = kr.status_code
AND kr.request_id IN (
SELECT request_id
FROM (SELECT DISTINCT request_id,
MAX
(start_time)
closed_date
FROM ebs_ch_datastore
WHERE 'Final BA Review and Deployment Exit Criteria' =
workflow_step_name
GROUP BY request_id))
Thanks,
Shaik MohiuddinThis error occurs when you try to create a materialized view , but if you run the sql the results are perfectly fine. Well it happend to me also and to fix this I made sure all the coulmns have the same data type which are used in joins or in where clause.
use
where
to_number(col1)=to_number(col2) and to_number(col3)=to_number(col4)
hope this helps..
Maybe you are looking for
-
Using variables in a jsp:useBean tag
I was wondeing if it is possible in any way to use variables in a jsp:useBean tag. Here is an example of what I am trying to do. <% String beanType = request.getParameter( "bean" ); if( beanType.equals( "Bean1" ) ) { beanClass = "com.myCompany.Bean1"
-
My itunes video purchase will not transfer to my mini for viewing
I have recently purcahsed a few movies from Itunes to view on my mini, but will not download and allow viewing....any suggestions?
-
Blackberry wireless headset HS-700 dials one number only
I just got a new wireless headset for my blackberry curve. It's supposed to be new, in box. Now that it's set up and connected, when I command it to dial a call it calls the same number ... An 870 area code number I don't know. No matter what I tell
-
Convert report from 4.6c to 4.0b
I want to convert report from 4.6c to 4.0B ..can somebody tell me the steps or coding i shud do for that.The output shud b same of that report. How can I do that??
-
Error, New Ipod Touch + Itunes
I got a new Ipod Touch. And I still havent been able to get it working. It is still on the screen with the USB cable arrow Itunes. I run Windows 7. I have installed Itunes and Quicktime. My computer recognized the Ipod, and it is now listed in Device