469,167 Members | 1,236 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,167 developers. It's quick & easy.

ora-01847 when updating a record...please help

Hello,

I am trying to update some varchar2 fields, which are storing dates. I
am trying to set a 'to date' with the next minumum from date i.e

from date | to date
01/01/1901 01/01/1902
01/01/1902 01/01/1903
01/01/1903 etc......

I have got a bit lost in creating my update statement, but cannot
understand why I am geting the following error message:-
ora-01847 day of month must be between 1 and last day of month.
The sql is:-

update emp_add_info_values_tab a
set free_column10 = (select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
(select min(to_date(c.free_column9,'DD/MM/RR')) from
emp_add_info_values_tab c
where c.add_info_type = 'B MED INS'
and c.free_column4 not in ('N','W')
and a.emp_no = c.emp_no
and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
where exists(select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
(select min(to_date(c.free_column9,'DD/MM/RR')) from
emp_add_info_values_tab c
where c.add_info_type = 'B MED INS'
and c.free_column4 not in ('N','W')
and a.emp_no = c.emp_no
and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
Any help would be greatly appreciated...

Cheers,

Simon
Jul 19 '05 #1
6 8268
Hi There,

There is no issue in UPDATE statement but the data must incorrect
stored in the table. Since you are using VARCHAR2 columna and hence it
would allow you to store the first 2 character of date greater than
31.

sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
Hello,

I am trying to update some varchar2 fields, which are storing dates. I
am trying to set a 'to date' with the next minumum from date i.e

from date | to date
01/01/1901 01/01/1902
01/01/1902 01/01/1903
01/01/1903 etc......

I have got a bit lost in creating my update statement, but cannot
understand why I am geting the following error message:-
ora-01847 day of month must be between 1 and last day of month.
The sql is:-

update emp_add_info_values_tab a
set free_column10 = (select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
(select min(to_date(c.free_column9,'DD/MM/RR')) from
emp_add_info_values_tab c
where c.add_info_type = 'B MED INS'
and c.free_column4 not in ('N','W')
and a.emp_no = c.emp_no
and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
where exists(select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
(select min(to_date(c.free_column9,'DD/MM/RR')) from
emp_add_info_values_tab c
where c.add_info_type = 'B MED INS'
and c.free_column4 not in ('N','W')
and a.emp_no = c.emp_no
and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
Any help would be greatly appreciated...

Cheers,

Simon

Jul 19 '05 #2
not sure if I totally understand your answer...I have looked at the
data in the table and cannot see any immediate problems. I have done a
length on the fields

select distinct length(b.free_column9)
from emp_add_info_values_tab b
where b.add_info_type = 'B MED INS'

which gives me 10......so they all seem the same?


sp*******@yahoo.com (SATYA PAL) wrote in message news:<a7**************************@posting.google. com>...
Hi There,

There is no issue in UPDATE statement but the data must incorrect
stored in the table. Since you are using VARCHAR2 columna and hence it
would allow you to store the first 2 character of date greater than
31.

sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
Hello,

I am trying to update some varchar2 fields, which are storing dates. I
am trying to set a 'to date' with the next minumum from date i.e

from date | to date
01/01/1901 01/01/1902
01/01/1902 01/01/1903
01/01/1903 etc......

I have got a bit lost in creating my update statement, but cannot
understand why I am geting the following error message:-
ora-01847 day of month must be between 1 and last day of month.
The sql is:-

update emp_add_info_values_tab a
set free_column10 = (select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
(select min(to_date(c.free_column9,'DD/MM/RR')) from
emp_add_info_values_tab c
where c.add_info_type = 'B MED INS'
and c.free_column4 not in ('N','W')
and a.emp_no = c.emp_no
and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
where exists(select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
(select min(to_date(c.free_column9,'DD/MM/RR')) from
emp_add_info_values_tab c
where c.add_info_type = 'B MED INS'
and c.free_column4 not in ('N','W')
and a.emp_no = c.emp_no
and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
Any help would be greatly appreciated...

Cheers,

Simon

Jul 19 '05 #3
sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
not sure if I totally understand your answer...I have looked at the
data in the table and cannot see any immediate problems. I have done a
length on the fields

select distinct length(b.free_column9)
from emp_add_info_values_tab b
where b.add_info_type = 'B MED INS'

which gives me 10......so they all seem the same?

Why would you think the length of the text data has anything to do
with it?


sp*******@yahoo.com (SATYA PAL) wrote in message news:<a7**************************@posting.google. com>...
Hi There,

There is no issue in UPDATE statement but the data must incorrect
stored in the table. Since you are using VARCHAR2 columna and hence it
would allow you to store the first 2 character of date greater than
31.

sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
Hello,

I am trying to update some varchar2 fields, which are storing dates. I
am trying to set a 'to date' with the next minumum from date i.e

from date | to date
01/01/1901 01/01/1902
01/01/1902 01/01/1903
01/01/1903 etc......

your sample data has date, month and 4digit year...
I have got a bit lost in creating my update statement, but cannot
understand why I am geting the following error message:-
ora-01847 day of month must be between 1 and last day of month.
The sql is:-

update emp_add_info_values_tab a
set free_column10 = (select b.free_column9
from emp_add_info_values_tab b
where a.add_info_type = 'B MED INS'
and a.free_column4 not in ('N','W')
and a.emp_no = b.emp_no
and b.add_info_type = 'B MED INS'
and to_date(b.free_column9,'DD/MM/RR') =
but your conversion format has only the two digit year.
[] and to_date(c.free_column9,'DD/MM/RR') >
to_date(a.free_column9,'DD/MM/RR')))
Any help would be greatly appreciated...

Cheers,

Simon


Simon,

Are you a gambling man? I would bet there is at least one, if not many
values in that column like '29/02/1900' or '31/09/1902' or similar bad
dates. Want to take the bet?

BIG HINT: You DO know that 1900 was NOT a leap year, don't you? 8^)

Change your data model and use the DATE type for storing dates and you
won't have this kind of insanity. Or at the very least, clean up your
data. Text fields like this are notorious for getting bad data
somewhere, somehow.

HTH,
Ed
Jul 19 '05 #4
ed********@magicinterface.com (Ed prochak) wrote in message news:<4b**************************@posting.google. com>...
sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
not sure if I totally understand your answer...I have looked at the
data in the table and cannot see any immediate problems. I have done a
length on the fields

select distinct length(b.free_column9)
from emp_add_info_values_tab b
where b.add_info_type = 'B MED INS'

which gives me 10......so they all seem the same?

Why would you think the length of the text data has anything to do
with it?


sp*******@yahoo.com (SATYA PAL) wrote in message news:<a7**************************@posting.google. com>...
Hi There,

There is no issue in UPDATE statement but the data must incorrect
stored in the table. Since you are using VARCHAR2 columna and hence it
would allow you to store the first 2 character of date greater than
31.

sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
> Hello,
>
> I am trying to update some varchar2 fields, which are storing dates. I
> am trying to set a 'to date' with the next minumum from date i.e
>
> from date | to date
> 01/01/1901 01/01/1902
> 01/01/1902 01/01/1903
> 01/01/1903 etc......
>
your sample data has date, month and 4digit year...
I have got a bit lost in creating my update statement, but cannot
> understand why I am geting the following error message:-
>
>
> ora-01847 day of month must be between 1 and last day of month.
>
>
> The sql is:-
>
> update emp_add_info_values_tab a
> set free_column10 = (select b.free_column9
> from emp_add_info_values_tab b
> where a.add_info_type = 'B MED INS'
> and a.free_column4 not in ('N','W')
> and a.emp_no = b.emp_no
> and b.add_info_type = 'B MED INS'
> and to_date(b.free_column9,'DD/MM/RR') =
but your conversion format has only the two digit year.
[] > and to_date(c.free_column9,'DD/MM/RR') >
> to_date(a.free_column9,'DD/MM/RR')))
>
>
> Any help would be greatly appreciated...
>
> Cheers,
>
> Simon


Simon,

Are you a gambling man? I would bet there is at least one, if not many
values in that column like '29/02/1900' or '31/09/1902' or similar bad
dates. Want to take the bet?

BIG HINT: You DO know that 1900 was NOT a leap year, don't you? 8^)

Change your data model and use the DATE type for storing dates and you
won't have this kind of insanity. Or at the very least, clean up your
data. Text fields like this are notorious for getting bad data
somewhere, somehow.

HTH,
Ed


Ed,

Thanks for that ..if only I could change the model!!..i am working
with a package solution. The table is designed to hold loads of
different types of code, so it had to be defined as varchar. The
subsection of data I was trying to update had no invalid data
formats...but other values in the same column did, my update statement
must have been wrong because it was these values that were causing the
problem.

I have taken a lazy way out though...i created a table by selecting
the values and updated the new table. I then deleted the old subset of
data and reinserted the values from my new table. It worked and was
only a one-off so I am fairly happy.

Thanks for your help.....
Jul 19 '05 #5
sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
[]

Ed,

Thanks for that ..if only I could change the model!!..i am working
with a package solution. The table is designed to hold loads of
different types of code, so it had to be defined as varchar. The
subsection of data I was trying to update had no invalid data
formats...but other values in the same column did, my update statement
must have been wrong because it was these values that were causing the
problem.
Not necessarily the update portion, but the WHERE clause. But does
that mean I won the bet? Too bad I didn't put money on it. 8^)

I have taken a lazy way out though...i created a table by selecting
the values and updated the new table. I then deleted the old subset of
data and reinserted the values from my new table. It worked and was
only a one-off so I am fairly happy.
So is anyone going to go back and fix the bad dates so this doesn't
happen next time? If you have to stay with VARCHAR at least try to
clean it up.
Thanks for your help.....


You are welcome. It is nice to get feedback on whether proposed
solutions really work, so thanks to you too.

Ed
Jul 19 '05 #6
ed********@magicinterface.com (Ed prochak) wrote in message news:<4b**************************@posting.google. com>...
sm********@hotmail.com (Simon) wrote in message news:<c0**************************@posting.google. com>...
[]

Ed,

Thanks for that ..if only I could change the model!!..i am working
with a package solution. The table is designed to hold loads of
different types of code, so it had to be defined as varchar. The
subsection of data I was trying to update had no invalid data
formats...but other values in the same column did, my update statement
must have been wrong because it was these values that were causing the
problem.
Not necessarily the update portion, but the WHERE clause. But does
that mean I won the bet? Too bad I didn't put money on it. 8^)

Always the way isn't it! I would have one thousands on if only bets!


I have taken a lazy way out though...i created a table by selecting
the values and updated the new table. I then deleted the old subset of
data and reinserted the values from my new table. It worked and was
only a one-off so I am fairly happy.


So is anyone going to go back and fix the bad dates so this doesn't
happen next time? If you have to stay with VARCHAR at least try to
clean it up.

I didn't really answer you properly here, the data causing a problem
was not 'date' data, but character based....my where clause just did
not seperate out the correct records...why it didn't is another story,
one that I don't really know!! If you saw some of the data models I
had to work with, you would feel very sorry for me!!!

Thanks for your help.....


You are welcome. It is nice to get feedback on whether proposed
solutions really work, so thanks to you too.

Ed

cheers......
Jul 19 '05 #7

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

1 post views Thread by Alan Brown | last post: by
2 posts views Thread by Ping | last post: by
6 posts views Thread by bdj | last post: by
1 post views Thread by CARIGAR | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.