[pgsql-jp: 29926] Re: ORACLEでいう DUAL 表は?

KASAHARA Norio no @ kasas.org
2003年 5月 16日 (金) 16:09:09 JST


かさはらです。こんにちは。

On 2003.5.16, at 15:20 Japan, Satoshi Nagayasu wrote:

> つまり、どういう必然性があってそうなっているのかが、理解しづらいんだと思
> います。PostgreSQLでは存在していないわけですし、私自身も DUAL なるものが
> 存在している必然性がよく理解できてません。
>
今回のケースでもそうですが、DUAL表はシステムデイトを取って来るときによく
使われます。で、システムデイトを取って来るのに、なんでSELECT文なの?とい
うところからおかしくなっている訳です。
ANSI/ISO SQLでは、SELECT文は、テーブル/ビューに代数演算を加えた結果を
取得するための文であるはずです。それを想定されていない目的に流用しようとす
るからムリが来るんだと思います。
テーブルを参照しないSELECT文自体がSQLをまげて解釈していると思えます。
その点では、PostgreSQLもダミーの表を使うOracleも同じです。

>  - 意味が先にあって、意味に文法を合わせるのか(FROM DUALが不要)
>  - 文法が先にあって、文法に意味を合わせるのか(常にFROM句が必要)
>
意味を考えるのなら、なぜSELECT文を使うのかというところから考えるべきで
しょう。
サーバの時計を参照したいのなら、他の方法があります。既にSQLに問い合わせ
言語以上のものを求めているのですから、それは、ホスト言語側に任せるか、
PSL/PSM(PostgreSQLでのPLpg/SQL)などのSQLのモジュール言語拡張機能
を利用すればいいのではないですか?

> 「SQLの仕様に忠実だから正しい」というのは、そのレイヤーを見ればその通り
> かもしれませんが、「そもそもSQLがなぜそういう仕様になっているのか」とい
> うSQLの仕様自体が意味的に正しいかどうかとは別でしょう。
>
「正しい」という言葉の定義をしなければならないのですが、仕様はあるもので
あって、その仕様が、自分のやろうとしていることに都合が良いか悪いかはとい
う判断はあっても、正しい/正しくないという判断はないというのが私の考えで
す。
ユークリッド幾何学と非ユークリッド幾何学のどちらが正しいのかという議論を
してもしようがなくて、自分がやろうとしていることは、どちらをベースにすれ
ば都合が良いかだと思います。
「関数に与える引数を間違えると、コンピュータシステムが爆発することがあり
ます」という仕様のシステムがあっても、その仕様は間違っている訳ではなく、
自分の仕事では、それでは困るのであれば、使わなければいいだけです。

> 「SQL仕様に沿っているから正しい」という主張と「SQL仕様自体が間違っている」
> という議論が噛み合うわけがないと思うのですが(論理的に)。どのレイヤーに
> フォーカスして「正しい」と言うのかによって、認識は変わってくると思います。
>
「SQLが間違っている」というのなら、SQLを使わなければいいと思います。
そういうオールオアナッシングの議論をするな、というのなら、各論をしますが、
今回は、OracleからPostgreSQLへポーティングで問題が発生していますから、
であれば、移植性を問題にするべきですよね。
この「レイヤー」に関して言えば、移植性が高いものが「正しく」、低いものが
「正しくない」。
注意してほしいのは、文法が標準に忠実だから移植性が高いと言うつもりはない
ということです。ポータビリティの議論をするならしましょう。
ただ、その場合は、「訳の分からないオブジェクトがあって汚い」というのは
正しい/正しくないということに直接的に関係ないという前提で話をしましょう。

--
カさはらのりお     no @ kasas.org




pgsql-jp メーリングリストの案内