I am starting to see Tom's issue here.  If you have a PL/pgSQL function
that does:

> >>DECLARE

> >>BEGIN
> >> SELECT CURRENT_TIMESTAMP INTO time1 FROM DUAL;

> >> SELECT CURRENT_TIMESTAMP INTO time2 FROM DUAL;
> >>END;

You would want those two to be the same because they are in the same
function, but by looking at it, they look the same as interactive
queries.  In a sense if we change CURRENT_TIMESTAMP, we are scoping the
variable to match the users/client's perspective.

However, we have added statement_timeout, so it does seem we have had to
move to a more user-centered perspective on some of these things.  The
big question is whether a variable that would be inserted into the
database should have such scoping.  I can see cases where people would
want that, and others where they wouldn't.

> 1. RDBMS start: No one
> 2. Session start: No one
> 3. Transaction start: PostgreSQL
> 4. Statement start: ???
> 5. CURRENT_TIMESTAMP evaluation: Oracle 9, ???

This is a nice chart.  Oracle already has transaction start reported by
sysdate:

> SQL> begin
>   2  insert into rbr_foo select sysdate from dual;
> [...wait about 10 seconds...]
>   3  insert into rbr_foo select sysdate from dual;
>   4  end;
>   5  /
> 
> PL/SQL procedure successfully completed.
> 
> SQL> select * from rbr_foo;
> 
> A
> ---------------------
> SEP 27, 2002 12:57:27
> SEP 27, 2002 12:57:27

so for CURRENT_TIMESTAMP it seems they have evaluation-time, while
MSSQL/Interbase have statement time.

> Given what Tom has posted regarding the standard, I think Oracle 
> is wrong. I'm wondering how the others handle multiple 
> references in CURRENT_TIMESTAMP in a single stored 
> procedure/function invocation. It seems to me that the lower 
> bound is #4, not #5, and the upper bound is implementation 
> dependent. Therefore PostgreSQL is in compliance, but its 
> compliance is not very popular.

I don't see how we can be compliant if SQL92 says:

        The time of evaluation of the <datetime value function> during the
        execution of the SQL-statement is implementation-dependent.

It says it has to be "during the SQL statement", or is SQL statement
also ambiguous?  Is that why Oracle did what they did?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [EMAIL PROTECTED]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to [EMAIL PROTECTED] so that your
message can get through to the mailing list cleanly

Reply via email to