質問

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

私のような SQL Server 担当者に、主な違いが何であるかを要約できるベビーベッド シートなどをアドバイスしていただけませんか。できるだけ早く立ち上げて実行できるようにしたいと考えています。

役に立ちましたか?

解決

@hamishcmcn

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

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

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

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

他のヒント

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

データ型もかなり異なるので、データ型についても見ていきたいと思います。

文字列の連結:
オラクル:||またはconcat()
SQLサーバー:+

これらのリンクは興味深いかもしれません:
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 対 SQL 2000)

@hamishmcn

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

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

選択したデータベースの可能性を最大限に活用することを真剣に考えている場合は、もう少し深く掘り下げて、次のような内容を読むことをお勧めします。 エキスパートによる Oracle データベース アーキテクチャ:9i および 10g のプログラミング手法とソリューション トム・カイト著。

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

と同じです

INSERT INTO atable (a_varchar_column) VALUES (NULL);

私は全くない sqlserver 経験はありますが、この 2 つの違いは理解しています

必要に応じて、プロシージャ内で一時テーブルを作成および削除できます。 即時実行 指示。

andy47 さんへ、私は比較で空の文字列を使用できるという意味ではありませんでしたが、挿入で空の文字列を使用すると、Oracle は空の文字列を null として扱います。私のエントリをもう一度読んで、次の SQL を試してください。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top