2011-09-12 19 views
3

私はPL/SQLコンテキストに関するいくつかの疑問を持っているが、ありますPL/SQLコンテキストはどのように機能しますか?

  1. PL/SQLコンテキストは、静的なのですか?
  2. PL/SQLコンテキストが同期していますか?
  3. プロシージャが同時に2回呼び出された場合、最初のプロシージャは完了するのに20秒かかります.2番目のプロシージャは実行を開始するのに20秒待機しますか?

ありがとう。

+0

「コンテキスト」と「コンテキストフロー」とはどういう意味ですか? 「同期」とはどういう意味ですか? – Codo

+0

が#3の場合、プロシージャがロックを行い、両方のデータが重複しているかどうかによって異なります。彼らが完全に独立していれば、理論的には同時に実行することができます。重複がある場合は、ほとんどの場合、連続して実行されます。 –

+0

@Codo:パッケージのインスタンスが存在する期間を意味します。私はインスタンスを呼び出すことができます。同期=同期。 – irobson

答えて

5

パッケージを参照する各データベースセッションは、パッケージの独立したインスタンスを持ちます。すべてのパッケージ状態(すなわち、グローバルパッケージ変数)は、各セッションとは異なる。

同じパッケージプロシージャまたはファンクションを呼び出す複数のセッション間では、それらが実行するデータベース操作の自然な副作用として発生する可能性のあるものと、ロックを達成するために必要なものを除き、同期はありません。

3

ご質問は少し難解です。私は決してそれに答えるつもりです。

  1. PL/SQLは手続き型言語です。だから、インスタンスについては話しません。コードは1回のみ存在し、パッケージ変数はセッションごとに1回存在し、ローカル変数はプロシージャまたは関数の呼び出しごとに1回存在します。別のセッションの変数やメモリにアクセスすることはできません。

  2. PL/SQLコードの呼び出しはすべて同期しています。マルチスレッドや共有メモリ(PL/SQL)のような概念はありません。ただし、Oracleはマルチユーザー・システムです。他のセッションでは、データベース内のデータを同時に変更する可能性があります。そして、これらの変更の多くは、トランザクションのアイソレーションのため一時的にあなたから隠されています。しかし、メモリ内の変数には影響しません。

  3. プロシージャは、別のセッションと同じデータベース行を変更しようとしない限り、ブロックされません。しかし、これはPL/SQLコードには関係なく、別のツールから実行されるSQLコマンドでも経験できます。

関連する問題