7

新しいプロジェクトを社内に持ち込んでいます。以前はすべての作業が SQL Server で行われていましたが、新しい製品では Oracle バックエンドが使用されています。

私のような SQL Server 担当者に主な違いの概要を説明するクリブ シートなどを教えてもらえますか。

4

8 に答える 8

3

@hamishcmcn

'' == Null というあなたの主張は、単に真実ではありません。リレーショナルの世界では、Null は「わからない」という意味でのみ読まれるべきです。値を Null と比較したときに、Oracle (および他のほとんどのまともなデータベース) から得られる唯一の結果は「False」です。

私の頭の中で、SQL Server と Oracle の主な違いは次のとおりです。

  • トランザクションを愛することを学びましょう。彼らはあなたの友達です - 自動コミットはそうではありません。
  • 読み取りの一貫性とブロッキング読み取りの欠如
  • SQL Server データベース == Oracle スキーマ
  • PL/SQL は T-SQL よりもはるかに豊富な機能を備えています
  • Oracle のインスタンスとデータベースの違いを学ぶ
  • サーバー上に複数の Oracle インスタンスを持つことができます
  • 先のとがったクリックウィザードはありません(本当に必要な場合を除きます)

他の皆さん、私を助けて、もっと追加してください。

于 2008-09-03T02:52:17.677 に答える
2

SQL Server から Oracle に移行する際に気付いた主な違いは、Oracle では SELECT ステートメントでカーソルを使用する必要があることです。また、一時テーブルの使用方法も異なります。SQL Server では、プロシージャで作成して最後に削除できますが、Oracle では、プロシージャが実行される前に一時テーブルが作成されているはずです。

データ型はかなり異なるため、データ型も調べます。

于 2008-09-02T14:00:06.207 に答える
2

文字列連結:
Oracle: || または concat()
SQL Server: +

これらのリンクは興味深いかもしれません:
http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm
http://www.mssqlcity.com/Articles/Compare/sql_server_vs_oracle.htm (古いもの: Ora9 vs Sql 2000)

于 2008-09-04T14:30:38.143 に答える
1

@hamishmcn

一般的に、これは悪い考えです。Oracleの一時テーブルは、作成してそのままにしておく必要があります(一度オフにするか、ほとんど使用しない場合を除く)。一時テーブルの内容は各セッションに対してローカルであり、セッションが閉じられると切り捨てられます。一時テーブルの作成/削除のコストを支払う意味はほとんどありません。2つのプロセスが同時にテーブルを作成しようとすると、クラッシュが発生したり、DDLの実行による予期しないコミットが発生したりする可能性があります。

于 2008-09-03T02:41:25.970 に答える
1

あなたがここで質問したことは非常に大きなトピックです。特に、データベースを何に使用しているかを実際に述べていないためです (たとえば、TSQL -> PL/SQL から移行するのか、それともバックエンド データベースを単に Java アプリケーションに変更するだけなのか)。に接続されていますか?)

データベースの選択を真剣に考えている場合は、もう少し深く掘り下げて、Tom Kyte によるExpert Oracle Database Architecture: 9i and 10g Programming Techniques and Solutionsのようなものを読むことをお勧めします。

于 2008-09-03T03:14:47.357 に答える
1

空文字列の扱い方の違いに注意してください。
INSERT INTO atable (a_varchar_column) VALUES ('');

と同じです

INSERT INTO atable (a_varchar_column) VALUES (NULL);

経験はありませんsqlserverが、両者の違いは理解しています

于 2008-09-02T13:10:26.857 に答える
0

必要に応じて、[即時実行]コマンドを使用して、プロシージャに一時テーブルを作成および削除できます。

于 2008-09-02T14:10:50.267 に答える
0

andy47 には、比較で空の文字列を使用できるという意味ではありませんでしたが、挿入で使用すると、オラクルはそれを null として扱います。私のエントリを読み直してから、次の SQL を試してください。

CREATE TABLE atable (acol VARCHAR(10));
INsERT INTO atable VALUES( '' );
SELECT * FROM atable WHERE acol IS NULL;

そして、「はい、そうではありません」という状況を避けるために、ここに外部リンクがあります

于 2008-09-06T18:48:39.847 に答える