Re: [GENERAL] Oracle buys Innobase - Mailing list pgsql-advocacy
| From | Jan Wieck |
|---|---|
| Subject | Re: [GENERAL] Oracle buys Innobase |
| Date | |
| Msg-id | 4358FB57.7000809@Yahoo.com Whole thread Raw |
| In response to | Re: [GENERAL] Oracle buys Innobase (Jeff Davis <jdavis-pgsql@empires.org>) |
| Responses |
Re: [GENERAL] Oracle buys Innobase
Re: [GENERAL] Oracle buys Innobase |
| List | pgsql-advocacy |
On 10/21/2005 1:58 AM, Jeff Davis wrote:
> SCassidy@overlandstorage.com wrote:
>> A "PostgreSQL to Oracle converter" might be a really big project.
>>
>> Having ported an application from PostgreSQL (7.3) to Oracle 9i, as I
>> recall, my biggest problems were:
>>
>> - Quoting issues: the original PostgreSQL application quoted
>> integer/numeric type, and Oracle will not allow that, so I had to make sure
>> only types that had to be quoted, were. (I normally do not quote numbers
>> in PostgreSQL, but I inherited the application).
>
> What does the standard say about that? Which types of values in Oracle
> need to not be quoted?
Section 5.3 of SQL92 defines:
<literal> ::=
<signed numeric literal>
| <general literal>
<unsigned literal> ::=
<unsigned numeric literal>
| <general literal>
<general literal> ::=
<character string literal>
| <national character string literal>
| <bit string literal>
| <hex string literal>
| <datetime literal>
| <interval literal>
The Restrictions for Entry level SQL say that
a) A <general literal> shall not be a <national character string
literal>.
b) A <general literal> shall not be a <datetime literal> or
<interval literal>.
There are no restrictions that say a <general literal> cannot be a
<numeric literal>. <numeric literal> is defined without quotes, but from
the above I conclude that a <general literal> is allowed instead of a
<numeric literal> to represent a numeric value, which means Oracle is
wrong IMNSVHO.
No reason to swell your breast though, we aren't perfect in the literal
area either. Because
<datetime literal> ::=
<date literal>
| <time literal>
| <timestamp literal>
<date literal> ::=
DATE <date string>
<time literal> ::=
TIME <time string>
<timestamp literal> ::=
TIMESTAMP <timestamp string>
<date string> ::=
<quote> <date value> <quote>
...
We allow a <general literal> to be used as a <datetime literal> or
<interval literal> without the keyword DATE, TIME, TIMESTAMP or
INTERVAL. Isn't that violating the restrictions for Entry level SQL?
Further
1) In a <character string literal> or <national character string
literal>, the sequence:
<quote> <character representation>... <quote>
<separator>... <quote> <character representation>... <quote>
is equivalent to the sequence
<quote> <character representation>... <character
representation>... <quote>
Note: The <character representation>s in the equivalent se-
quence are in the same sequence and relative sequence as in the
original <character string literal>.
The rule is more or less repeated for other literal types. But 8.0.4 claims
wieck=# select 'foo ' 'bar';
ERROR: syntax error at or near "'bar'" at character 15
LINE 1: select 'foo ' 'bar';
^
I guess neither Oracle nor we get the cookie here.
Jan
>
> Regards,
> Jeff Davis
>
> ---------------------------(end of broadcast)---------------------------
> TIP 9: In versions below 8.0, the planner will ignore your desire to
> choose an index scan if your joining column's datatypes do not
> match
--
#======================================================================#
# It's easier to get forgiveness for being wrong than for being right. #
# Let's break this rule - forgive me. #
#================================================== JanWieck@Yahoo.com #
pgsql-advocacy by date: