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 -~----------~----~----~----~------~----~------~--~---