web-dev-qa-db-ja.com

Oracle PL / SQLの表変数?

最近、開発者として新しいポジションを開始しましたが、PL/SQLで少し問題が発生しています。私はMSSQLを何年も使用していますが、PL/SQLは少し扱いに​​くいと感じています。

MS SQLで関数とストアドプロシージャを作成するときに行っていたことの1つは、繰り返し発生する結果セットをテーブル変数に入れることでした。これにより、プロシージャ全体でそれらを再クエリする必要がなくなりました。

このようなもの:

declare @badPeople table(recordPointer int)
insert into @badPeople
select BP_Record_Pointer
from People
where BP_Bad = 1

PL/SQLで同様のことを行うことを検討していますが、開始方法がよくわかりません。これが可能であるならば、何か考えはありますか?

9
Sonny Boy
declare
  type t_number is table of number;
  v_numbers t_number;
begin
  select BP_Record_Pointer
    bulk collect into v_numbers
    from People
    where BP_Bad = 1;
end;

これにより、テーブルの値を含むネストされたテーブルが作成されます。匿名ブロックの最後でテーブルがスコープ外になることに注意することが重要です。そのため、テーブルを使用して実行することはすべて、そのブロック内で実行する必要があります。

14
Allan

Oracleでは、MSとは異なり、SQLカーソルは悪魔や避けるべきものとは見なされていません。したがって、通常、Oracleでは、MSSQLよりもはるかに頻繁にカーソルを使用します。もちろん、SQLだけでそれを実行でき、最適なカーソルがない場合でも、Oracleでカーソルをテストして使用することを恐れないでください。 PL/SQLに関する優れた本を入手してください。これは優れた本です http://www.Amazon.com/Oracle-PL-SQL-Programming-4th/dp/0596009771 。 Gratzyによる投稿は、使用できるもう1つのオプションです。だから、いつ何を使うべきかを理解するために使うことができる良い本を手に入れてください。 PL/SQLは、T-SQLと比較して非常に豊富な環境です。最初の曲線を乗り越えると、より多くの学習曲線がありますが、それは本当に簡単で強力なフル言語です。それに加えて、それはとても楽しいです。

6
Kuberchaun