2017-03-24 4 views
0

私はフォーラムを見てきましたが、現時点ではこの質問に対する答えはありません。基本的に私は自分のプロシージャ内のビューを作成しようとしています。複雑なselectステートメントよりも簡単です。なぜなら、その 'ORA-01422の正確なフェッチは要求された数よりも多くの行を返します。'ということです。参照の下部にプロシージャのビューの作成PL/SQL

しかし、ビューオプションは動作していないようだが、次のいずれかを予期しているときに別のエラー 'シンボルを検出しました:'が返されます。私が間違っていることはありますか?

ありがとうございます。

procedure proRekt (par_id number) is 
    vardec farm.parcel.description%type; 
    vland farm.landuse.landuse_id%type; 
    v_luse farm.landuse.landuse%type; 
    varpl farm.parcel.parcel_id%type; 

begin 
create or replace view Door as 
select a.parcel_id,a.description,b.landuse_id,c.landuse 
from 
    farm.parcel a, 
    farm.parcel_landuse b, 
    farm.landuse c 
where a.parcel_id = b.parcel_id 
    and b.landuse_id = c.landuse_id; 

select parcel_id,description,landuse 
    into varpl, 
     vardec, 
     vland 
    from door 
    where parcel_id = parID; 

****障害のあるselect文

select a.parcel_id,c.description,a.landuse_id,b.landuse 
into varpl, 
     vardec, 
     vland, 
     v_luse 
from farm.parcel_landuse a, 
     farm.landuse b, 
     farm.parcel c 
where c.parcel_id = parID 
    and a.landuse_id = b.landuse_id 
    and a.parcel_id = c.parcel_id; 
+0

oracleユーザーではありませんが、構造に選択するのが間違っています...選択

から
に変更するか、複数のテーブルに挿入しようとしていますか? – maSTAShuFu

+0

そのpl/sqlはsqlとは異なる変数ビットを選択する必要があります。 – Delta1x

+0

私は..これはvarTNo変数を探している必要がありますか? – maSTAShuFu

答えて

1

SQLスコープでビューを作成します。

create or replace view Door as 
select a.parcel_id, 
     a.description, 
     b.landuse_id, 
     c.landuse 
from tithedb.parcel a 
     INNER JOIN tithedb.parcel_landuse b 
     ON (a.parcel_id = b.parcel_id) 
     INNER JOIN tithedb.landuse c 
     ON (b.landuse_id = c.landuse_id); 

は、手順のPL/SQLのスコープでそれを使用します。

procedure proexempt (parID number) 
is 
    vardescription tithedb.parcel.description%type; 
    varland tithedb.landuse.landuse_id%type; 
    varlanduse tithedb.landuse.landuse%type; 
    varparcel tithedb.parcel.parcel_id%type; 
begin 
    select parcel_id, 
     description, 
     landuse 
    into varparcel, 
     vardescription, 
     varlanduse 
    from door 
    where parcel_id = parID; 

    -- ... more stuff 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    NULL; -- Handle error here. 
    WHEN TOO_MANY_ROWS THEN 
    NULL; -- Handle error here (or use "AND ROWNUM = 1" in your query). 
END proexempt; 
/
+0

ありがとう!!!外出は私の問題を解決しました。最初にそれを実行し、それはexpectionで動作しましたが、何らかの理由ですべてのデータを返すことができませんでしたが、ほとんどの場合、あまりにも多くの行の例外をスローしていました。だから私はuを提案して、Rownum <2をクエリに入れ、例外とその完全な作業を削除しました。 – Delta1x

関連する問題