2009-05-14 12 views
2

誰かがOracleで実際にオブジェクトとコレクションを使用しているかどうかを知りたいだけですか?これは避けなければならないものですか?oracleオブジェクトとコレクション

例えば

create type t_person as object (
    id integer, 
    first_name varchar2(30), 
    last_name varchar2(30) 
); 

答えて

4

PL/SQLプログラミングに真剣に取り組んでいれば、コレクションやオブジェクトがなくてもほとんど生きることができません。つまり、私はデータベーステーブルを「きれいに」保ちます。つまり、すべての列に原子値やネストしたテーブルなどがありません。

3

私はプログラマの多くは、このような拡張機能を使用していると確信しています。個人的には、リレーショナルDBを使用する際に「合理的に標準的なSQL」コアに近づこうとしています.SQLコードを他のDBエンジンに移植しなければならないことがよくあります。ポートははるかに難しくなります(プロプライエタリなエクステンションはしばしば機能や速度をほとんど追加しません)。

+0

+1、拡張機能については良い点があります。 – DCookie

0

私は単純なコレクション[つまり、TABLE OF VARCHAR2(4000)]を使用しますが、「作業中」のみを使用します。 Oracle以外のタイプの表は実際に作成されていません。 私はオラクル提供オブジェクト(例:MDSYS.SDO_GEOM)を地理的なものに使用しました。

0

私はそれらを避けました。なぜなら、オブジェクトはリレーショナルモデルでうまく動かないからです。もしあなたが両方の力を持っているなら、どちらの力も得られない。このため、オブジェクト・リレーショナル・マッピングはプロジェクトにとって非常に重要です。

0

はい、コレクションをストアドプロシージャの引数として使用します。これにより、テンポラリテーブルを使用せずに特定のID(リストで変数と呼ばれることが多い)を持つすべてのレコードを選択することができます。例えば

:またmutli列オブジェクトで、この技術を使用することができます

create or replace type numbertype 
as object(nr number(20,10)) 
/

create or replace type number_table 
as table of numbertype 
/

create or replace 
procedure tableselect(p_numbers in number_table, p_ref_result out sys_refcursor) 
is 
begin 
    open p_ref_result for  
     select *  
     from employees 
     , (select /*+ cardinality(tab 10) */ tab.nr 
      from table(p_numbers) tab) tbnrs  
     where id = tbnrs.nr; 
end; 
/

関連する問題