I got this working by clearing few syntax errors and also by
correcting the hard coded timestamp format, I had to give milliseconds
as well.


create or replace procedure TEST_TIME_PROC (
      v_SYS_ATTR_VALUE_ID NUMBER,
      v_last_upd TIMESTAMP
) as
begin
   merge into TEST_TIME t1
   using (select
            v_SYS_ATTR_VALUE_ID SYS_ATTR_VALUE_ID,
                  v_last_upd LAST_UPD
            from dual
         ) t2
   on (t1.SYS_ATTR_VALUE_ID = t2.SYS_ATTR_VALUE_ID)
   when matched then
      update set
         --t1.SYS_ATTR_VALUE_ID  = t2.SYS_ATTR_VALUE_ID,
         t1.LAST_UPD =  t2.last_upd
   when not matched then
      insert (
        t1.SYS_ATTR_VALUE_ID,
        t1.last_upd
      ) values (
        t2.SYS_ATTR_VALUE_ID,
         t2.last_upd
         );
   commit;
end;
/

declare
v_date TIMESTAMP(3):= '22-MAY-200907:48:53.275';

Begin

begin
TEST_TIME_PROC ( 12,  v_date);
end;

begin
TEST_TIME_PROC ( 14, v_date);
end;


End;
/

drop procedure TEST_TIME_PROC;
/


On Jun 12, 1:40 pm, ddf <orat...@msn.com> wrote:
> Comments embedded.
>
> On Jun 12, 12:11 pm, John <johnysm...@gmail.com> wrote:
>
> > Hi All,
>
> > I need to pass Date value to a procedure for inserting into a table.
>
> You're attempting to pass a TIMESTAMP, not a DATE.
>
> > But the date will be hard coded date as opposed to system date.
>
> Again, you are not passing any DATE values, these are TIMESTAMP
> values.
>
> > It
> > works for me when I tried with sysdate
>
> Can you show us the successful execution of this procedure using
> SYSDATE?
>
>
>
> > but fails when I am giving hard
> > coded date value, think I am missing some conversion here. Can some
> > one please help.
>
> > set define off;
>
> > create or replace procedure TEST_TIME_PROC (
> >       v_SYS_ATTR_VALUE_ID NUMBER,
> >       v_last_upd TIMESTAMP  <--- not a date
> > ) as
>
> > last_upd TIMESTAMP := v_last_upd;  <--- Why do this?  You don't use this 
> > variable you've just set
> > begin
> >    merge into TEST_TIME t1
> >    using (select
> >             v_SYS_ATTR_VALUE_ID SYS_ATTR_VALUE_ID,
> >         v_last_upd LAST_UPD
> >           from dual
> >          ) t2
> >    on (t1.SYS_ATTR_VALUE_ID = t2.SYS_ATTR_VALUE_ID)
> >    when matched then
> >       update set
> >          t1.SYS_ATTR_VALUE_ID  = t2.SYS_ATTR_VALUE_ID
> >          t1.LAST_UPD =  v_last_upd
> >    when not matched then
> >       insert (
> >         t1.SYS_ATTR_VALUE_ID,
> >         t1.last_upd
> >       ) values (
> >         t2.SYS_ATTR_VALUE_ID,
> >          v_last_upd
> >          );
> >    commit;
> > end;
> > /
>
> > declare
> > v_date TIMESTAMP := '31-DEC-99 12.00.00.000000000 AM';
>
> > Begin
>
> > begin
> > TEST_TIME_PROC ( 2778001,  'v_date');
> > end;
>
> > begin
> > TEST_TIME_PROC ( 2779001, 'v_date');
> > end;
>
> > End;
> > /
>
> > drop procedure TEST_TIME_PROC;
> > /
>
> > Gives me this error.
>
> > End;
> > Error report:
> > ORA-06550: line 7, column 1:
> > PLS-00905: object TX1.TEST_TIME_PROC is invalid
> > ORA-06550: line 7, column 1:
> > PL/SQL: Statement ignored
> > ORA-06550: line 11, column 1:
> > PLS-00905: object TX1.TEST_TIME_PROC is invalid
> > ORA-06550: line 11, column 1:
> > PL/SQL: Statement ignored
> > 06550. 00000 -  "line %s, column %s:\n%s"
> > *Cause:    Usually a PL/SQL compilation error.
> > *Action:
>
> First, the MERGE statement isn't PL/SQL friendly so you'll need to use
> dynamic SQL, I believe, to get this to even compile.  Secondly, I
> can't get this to run after it does successfully get created (and I am
> probably missing something obvious).  And it may also be that the
> MERGE command wasn't destined for execute immediate, either.  You may
> need to roll up your sleeves and write a PL/SQL merge routine and
> leave the MERGE command to SQL*Plus.
>
> > Please help resolve this.
>
> > Thanks,
> > John
>
> David Fitzjarrell
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Oracle PL/SQL" group.
To post to this group, send email to Oracle-PLSQL@googlegroups.com
To unsubscribe from this group, send email to
oracle-plsql-unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/Oracle-PLSQL?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to