• ベストアンサー

拡張SQLの記述方法を教えてください(Oracle・SQLserver)

SQL文内に"sysdate"を記述してしまうとOracleでは動作しますが、 SQLsercerではエラーになると思います。そこで「拡張SQL」を 使用すればOracleでもSQLserverでも動作するようになると 聞いたのですが記述方法がわかりません。 どなたかご教授いただけませんでしょうか? 宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

拡張SQLとは、レコードの抽出や追加、更新などだけではなくて、複合文を使って、他の言語のように変数や条件文などを記述する方法です。 たとえば BEGIN DECLARE 変数名 型 ; IF データベースがOracleか THEN OracleでのSQL文で宣言した変数に値をセット ; Else IF データベースがSQLserverか THEN SQLserverでのSQL文で宣言した変数に値をセット END IF END のような感じで一連のSQL文を書くことができるということではないでしょうか? (この例は、SQL Anywhereでの例です。) ひょっとしたら自分の認識が違うかもしれません。・・・ どなたか補足まってま~す。m(__)m

ct27
質問者

お礼

アドバイスありがとうございました。 通常拡張SQLと言えばShadowMoonさんのおっしゃるとおりの内容ですよね。 私の質問もかなり足りない部分があったので非常に申し訳ない気持ちです。 一応今回私が悩んでいた部分が一応解決しましたのでご紹介いたします。 実はJavaのアプリケーションで質問の内容を解決しようとしておりました。 (ここからJavaの話になってしまうのですが・・・) Sunが提供しているJavaDocにJDBCについての記述がありその中で"スカラー関数" というものがあるのです。 http://java.sun.com/j2se/1.3/ja/docs/ja/guide/jdbc/spec/jdbc-spec.frame11.html これを使用するとJDBC内で自動的に接続先のDBにあった関数に変換してくれるという 便利なものです。 しかし、Oracleではなんとこいつをサポートしておらず(泣)結局トリガーで代用 することになりました。 何かのご参考になればと思います。

その他の回答 (1)

  • nek
  • ベストアンサー率34% (46/135)
回答No.1

サーバー側から時間を取得する方法ですね Oracleはsysdateですが SQL Serverでは、GETDATE()で取得する事が可能です。 GETDATEでヘルプを探してみてください。

ct27
質問者

補足

早々のご回答ありがとうございます。 私の質問の仕方が悪かったため、違う意味にとらえられてしまったみたいですね。 私がやりたいことはOracleもSQLserverも両方動作する1つのSQL文を 記述したいということです。 例えば、 update table1 set col1 = sysdate をSQLserverで実行するとエラーになるはずです。sysdateのような DBに依存した部分を「拡張SQL」という記述方法で記述するとOracleでも SQLserverでも正常に動くと聞きました。 ご存じでしたら記述方法をご教授下さい。