位置情報で子どもの居場所をお知らせ

お世話になっております。
もしOracleやSQL Serverに関してご存知の方が
いらっしゃいましたらご教授ください。

今、業務で
「Oracleに載せるシステムをSQL Serverで載せられないか?」
という話が出ており私が調査を行う事になりました。

しかし私のSQL Server経験が浅い為困っている点があります。
(以下の質問は当然ですがシステムで動く・動かない
の話はヌキにしてのSQLレベルでの話です)

・Oracle特有のSQL構文をSQL Serverに見合った構文に
直すことによって(DATE→datetime/NUMBER→int等)一般的な
SELECT文、INSERT、UPDATE、DELETE文はそのまま使う事が可能か?

・上の件に関する経験をお持ちの方・知識のある方にお聞きしますが
何かこの件に関する注意点などありますでしょうか?

の2点になります。
どうかご存知の方がいらっしゃいましたらお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

SQLはOracleであってもSQLServerでも基本的に同じです。


基本的にOracleと違うのはSQLServerは一つのインスタンスに複数のデータベースを対応させられる。
>Oracle特有のSQL構文をSQL Serverに見合った構文に・・一般的なSELECT文、INSERT、UPDATE、DELETE文はそのまま使う事が可能か?

Oracle固有の関数はSQL-Serverでは使用できませんがその辺を考慮すればSELECT文、INSERT、UPDATE、DELETE文は使えます。
Oracleで日付を取るときはご存知のようにSYSDATE、SQLServerではSYSDATEのかわりにGETDATE関数を使います。
OracleのDATE型では秒単位までなのに対してSQLServerのDATETIME型は秒以下のレベルもある。Oracleでは日付データにTRUNC関数を使うことで日時の情報だけを取り出せますSQLServerでは時刻を切り捨てる関数はないのでconvertを使ったりします。でもSQLServerはDATEDIFF・DATEPART・DAY・MONTH・YEARを使って加算したり抜き出したりできる。
NULLの置き換えはOracleはNULLを置き換えるときにNVL関数を使いまがSQLServerではISNULL関数を使って記述します。
以上の様な使える関数と構文の違いを考慮すれば一般的なSQLは使えます。
    • good
    • 0

"一般的な"がどういった内容をを指すのか分からないのですが、


そっくりそのまま、はできません。
Oracleの、例えば"(+)"はSQLServerでは使えない、など。

参考URLに、やや古いですが、関連記事のあるサイトを挙げます。
お使いの開発ソフトにも拠るとは思いますが、
いくらか、考察の助けになるのではないでしょうか?

参考URL:http://www.itmedia.co.jp/enterprise/0307/25/epn2 …
    • good
    • 0
この回答へのお礼

現在、参考URLの方を拝見しておりますが
大変勉強になっております。

大変参考になりました。
ありがとうございます。

お礼日時:2005/10/03 14:41

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QSQL Server のキャラクターセット(内部文字コード)は何処で定義するのでしょうか?

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問させていただきます。
以下2点についてどなたかコメント願います。
1.(Oracleでいうキャラクターセット)はどこで定義するのでしょうか?
2.OracleでいうNLS_LANGに相当するものはあるのでしょうか?
 (ひょっとしたらマイクロソフト製品なのでサーバもクライアントもCP932固定なのでしょうか?)

根本的にはシステム構築する上で『極力文字化けに遭遇したくない』思い出このような質問をさせていただきました。
『文字化け』について注意点などありましたら合わせてコメントいただければ助かります。
以上よろしくお願いします。

SQL Server超初心者です。(Oracleについては約1年ちょっとの経験はあります)どうぞよろしくお願いします。
今回SQL Server2005 を使って簡単なシステムを構築する事になりました。
SQL Serverが扱う文字コートについて教えてください。
Oracleを使っていた時の経験としてDB内部のキャラクターセットと
クライアントで使う文字セット(NLS_LANG)を意識しておかないと、いろんな「文字化け」問題に遭遇した時に対応できませんでした。
きっとSQL Serverにおいても同じような事ではないかと思いここに質問...続きを読む

Aベストアンサー

Windowsのロケールの設定を日本語にした状態でSQLServerをインストールした場合、cp932がデフォルトの照合順序になります。照合順序については参考URLをご覧下さい。

SQLServerではわかりませんが、PostgresではJDBCドライバ部分で変換していたように記憶しています。ODBCドライバではAutoTranslateという機能があります。

このため、ODBC接続で何も考えずにvarcharを使用するとcp932になります。

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx

QOracleから見たOracleの優位性(SQLServerとの比較)

OracleとSQLServerを比較したとき、Oracleが優れている点ってどんなところだと思いますか?
また開発でOracleとSQLServerどちらかを提案するとき、どういった切り分けで2つを使い分けますか?

私が思うOracleの優位性は
・行ロックが確実
・RowIDの存在
・データが大容量でも比較的早い
・細かくチューニングができる
です。

またOracleかSQLServerかのどちらかの選択で、私が自由に提案できるとしたら、行ロックがほとんど必要ない&データ件数が数万~数十万程度ならSQLServer、行ロックが頻繁に必要&データ件数が数十万以上ならOracleを提案します。

ちなみに私のDBを使った開発歴は、Access1年程度、SQLServer1年程度、Oracle4年程度です。
よろしければ、みなさんのDBを使った開発歴も教えてください。

Aベストアンサー

こんばんは。自分も大変興味ある話題です。

>>行ロックが確実

これはMSSQLやDB2も搭載している機能ですよね。何をもって「確実」と
見るのかが難しそうです。

データ件数でのテスト評価は各ベンダーからベンチマークが
出てますが実際各DBに差はありますか?。
※同一マシン同件数一括更新などで

処理件数で提案するのは可能なのでしょうか?。。


>>RowIDの存在

両者を細部技術まで切り分ける際には話題になりそうですね。
ただ適切なSQLチューニングをすれば特に問題にはならないような気も。

自分のざっくりな印象ですが

>>Oracle
・情報、技術者が豊富
・業界標準という印象(実績が多い)
・複数OSサポート
・初期パラファイル、制御ファイルなど保守対象が多い
・チューニング作業には深い知識が必要(パラメータ、Explain含め)

>>SQLServer
・Windowsインフラとの親和性(Active Directoryなど)
・MS開発言語との親和性(2005など特に)
・GUIツールの充実(トレース、バックアップなど)
・自動メモリ管理による管理負荷の低減

インフラ、開発言語、で決まる要素なのかな?って印象ですが。。

こんばんは。自分も大変興味ある話題です。

>>行ロックが確実

これはMSSQLやDB2も搭載している機能ですよね。何をもって「確実」と
見るのかが難しそうです。

データ件数でのテスト評価は各ベンダーからベンチマークが
出てますが実際各DBに差はありますか?。
※同一マシン同件数一括更新などで

処理件数で提案するのは可能なのでしょうか?。。


>>RowIDの存在

両者を細部技術まで切り分ける際には話題になりそうですね。
ただ適切なSQLチューニングをすれば特に問題にはならないよう...続きを読む

QSQLとORACLEの違いを教えてください

はじめまして。
カテゴリーがここで良いのかわからないのですが・・・
SQLとORACLEをやっているのですが、いまいち違いがわかりません。
バージョンによってここが違う等ではなく、根本的に何処がどのように違うものなのか教えてください。

あと、「ORACLEはSQLを自装したもの」と聞いたのですが、自装ってどういうことですか?
基本的なことばかりですが、よろしくお願い致します。

Aベストアンサー

自装は「実装」の間違いじゃないでしょうか?

「実装」であれば、ORACLEという製品は、
データベースの1つの実装です。
表計算の実装の1つにエクセルがありますし、
ワープロの実装の1つにワードがあります。

 実装はなにかの考え方やアイデアを、形にする、
この場合だとソフトウェアにするって意味だと思います。

 で、オラクルはデータベースの1つの実装であり、
お店で売ってる製品の名前です。マイクロソフトには
アクセスという製品がありますよね。それと同じです。

 SQLはコンピュータの専門家でない人のために
作られた、データを操作する言語です。

 データベースは基本的にはSQL言語で操作します。
例え、オラクルでマウスやキーボードを使って操作
していても内部ではSQLが使われています。

Qbatファイルからsql文実行

クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

Aベストアンサー

sqlplus に -S オプションを追加してみればどうでしょうか。

参考URL:http://biz.rivus.jp/sqlplus_overview.html

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QSQLのVARCHARとVARCHAR2の違い

SQLについての質問です。
文字列型のVARCHARとVARCHAR2の違いについて教えてください。
まだ、初心者なのでなるべく分かりやすくお願いします。

Aベストアンサー

データベースによって、データ型の定義が違います。
私が知っている限りでは、
MS-SQLserverなどでは、可変長の文字列はvarcharですが、
Oracleでは、varchar2です。
他にも、MSのdatetimeに相当するものが、Oracleはdate型、という具合に名前が違います。
お使いのDBに沿ったデータ型の定義を調べると良いのではないでしょうか?
それぞれ違うと思いますよ。(似てると言えば似ているけど。)

Qテーブル名を[]でくくらないとエラーになってしまう

テーブル名を[]でくくらないとエラーになってしまいます

sqlserver 2008 express edition を利用しているのですが

テーブル名 やカラム名に[]でくくってSQL文を実行しないと
エラーが出てしまいます
例えば

select * from [table]  の様にしないといけません
これを
select * from table で実行できるようにしたいのです
どうしたらいいのでしょうか

会社ではsqlserver2005を利用しているので
2008からは[]でくくる必要になったのでしょうか

それとも初期設定で何かしないといけないのでしょうか
設定方法を教えて下さい

sqlserver management studio2008もインストール済みです

Aベストアンサー

「table」はSQLの予約語です。そのため初期設定などで、「table」をそのままSQL文に使用することは出来ません。これは他のRDBも同様です。
SQL SERVERでは[]で括ることで、予約語をオブジェクト名に出来ますが、おすすめは出来ません。
なお、ANSI/ISOの標準規格では「"(ダブルクォーテーション)」で括ることで、同様にエラーを回避できます。SQL SERVERでも初期設定でANSI/ISOと同様に「"」で括るモードにすることは出来ますが、それでも予約語である以上何らかの対応は必要です。

> 会社ではsqlserver2005を利用しているので
> 2008からは[]でくくる必要になったのでしょうか

そんなことはないはずです。

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Qデータベース内のテーブル名の取得

お世話になります。
初心者的な質問でしたらすいません。
SQL文にてデータベース内のテーブル名を
調べることができると聞いたことがあるのですが、
可能でしょうか。

もし、可能であれば、SQLの記述を教えてください。
お願いします。

Aベストアンサー

select * from tab;

私の場合、テーブル名だけ手っ取り早く知りたいとき、↑を打ちます。その他の情報も知りたいときは#2さんの仰るとおり、user_tablesで取得します。

QEXISTSを使ったDELETE文

「SELECT文の件数」と、
「同じSELECT文を使ったDELETE文の件数」が一致しない現象が起き、困っています。

【SELECT文】※2件返ってきます。
SELECT
  a.部署コード,
  a.社員コード
FROM
  社員マスタ a,
  組織マスタ b
WHERE
  a.部署コード = b.部署コード


【DELETE文】※50件 DELETEされます。
DELETE TABLE
  社員マスタ
WHERE
  EXISTS
  (
  SELECT
    a.部署コード,
    a.社員コード
  FROM
    社員マスタ a,
    組織マスタ b
  WHERE
    a.部署コード = b.部署コード
  )


環境はSQLSERVER2005です。
件数はSQLSERVER2005のカウントオプションで表示されているものなので間違いないです。

宜しくお願いします。

Aベストアンサー

EXISTS 句は、副問い合わせが行を返した場合 TRUE そうでない場合 FALSE と評価されます。

例示いただいた副問い合わせは TRUE を返すので DELETE されます。

詳細については、SQLの入門書を参考にしてください。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング