Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Usenet -> c.d.o.server -> Re: oracle 10g bug or sth wrong of my code?
Michel Cadot wrote:
> "Robert Klemme" <bob.news_at_gmx.net> a écrit dans le message de news:
> 47814dFe6i6aU1_at_individual.net...
>> Michel Cadot wrote: >>> "Robert Klemme" <bob.news_at_gmx.net> a écrit dans le message de news: >>> 475sp5Fe42ukU1_at_individual.net... >>>> Michel Cadot wrote: >>>>> "Steve" <luodi_at_yahoo.com> a écrit dans le message de news: >>>>> 1141747100.364769.123800_at_j52g2000cwj.googlegroups.com... >>>>>> >>>>>> I just try to update DATE field by add n * 365 by a >>>>>> stores_procedure, but >>>>>> after run the procedure, the date field becomes NULL. I don;t >>>>>> know why? >>>>>> >>>>>> >>>>>> I have tried on Oracle 10.1 and 10.2(XE) >>>>>> Thanks for help! >>>>>> >>>>>> Steve >>>>>> ----------------------------------------------------------- >>>>>> drop table d2; >>>>>> >>>>>> CREATE TABLE D2 >>>>>> ( >>>>>> ID VARCHAR2(20 BYTE) NOT NULL, >>>>>> DATE_CREATED DATE, >>>>>> DATE_UPDATED DATE, >>>>>> DATE_EXPIRED DATE, >>>>>> DATE_PAID DATE, >>>>>> PERIOD NUMBER, >>>>>> ACCOUNT VARCHAR2(40 BYTE), >>>>>> CONSTRAINT "CID" PRIMARY KEY ("ID", "ACCOUNT") >>>>>> ); >>>>>> >>>>>> INSERT INTO D2 ( ID, DATE_CREATED, DATE_UPDATED, DATE_EXPIRED, >>>>>> DATE_PAID, PERIOD, >>>>>> ACCOUNT ) VALUES ( >>>>>> '001', NULL, TO_Date( '03/02/2005 12:00:00 AM', 'MM/DD/YYYY >>>>>> HH:MI:SS AM'), TO_Date( '03/07/2006 12:00:00 AM', 'MM/DD/YYYY >>>>>> HH:MI:SS AM') , NULL, NULL, 'inhouse'); >>>>>> COMMIT; >>>>>> >>>>>> >>>>>> CREATE OR REPLACE PROCEDURE direct_update(pid varchar2, period >>>>>> number) IS >>>>>> BEGIN >>>>>> >>>>>> update d2 >>>>>> set date_expired = date_expired + 365 * period; >>>>>> >>>>>> >>>>>> END direct_update; >>>>>> / >>>>>> >>>>>> select date_expired from d2; >>>>>> >>>>>> >>>>>> exec direct_update('001', 2); >>>>>> >>>>>> select date_expired from d2; >>>>>> >>>>> >>>>> This is what happens when you don't have some correct naming >>>>> rules. Hint: change your parameter names to something like >>>>> "p_pid" and "p_period" >>>>> and this will work. >>>> >>>> Alternatively use the full qualified name like this: >>>> >>>> update d2 >>>> set date_expired = date_expired + 365 * direct_update.period; >>>> >>>> Kind regards >>>> >>>> robert >>>> >>> >>> But this is exactly what he doesn't want to do! >> >> You lost me here. How do you know the OP didn't want to do this? >> >> robert >> >
Are you sure about that? Note that "direct_update" is the name of the SP and "direct_update.period" is the SP parameter and not the column "d2.period".
There is a nice appendix about name resolution in "PL/SQL User's Guide and
Reference".
see http://download-uk.oracle.com/docs/cd/B19306_01/appdev.102/b14261.pdf
> So as this is not the result he wanted, I assumed what I said is the
> correct
> one of the two options.
I beg to differ.
Kind regards
robert Received on Wed Mar 08 2006 - 10:44:38 CST