2017-03-24 1 views
0

Ich habe im Forum nachgesehen, aber im Moment gibt es keine Antwort auf diese Frage. Im Grunde versuche ich eine Ansicht innerhalb meiner Prozedur zu erstellen, da es einfacher ist als eine komplizierte Select-Anweisung, die anscheinend nicht funktioniert, weil die Rückgabe von 'ORA-01422 exact fetch mehr zurückgibt als die angeforderte Anzahl von Zeilen' an der Unterseite für ReferenzAnsicht in Prozedur erstellen PL/SQL

Allerdings scheint die Ansicht Option nicht zu arbeiten ihre Rückkehr einen anderen Fehler 'Begegnung mit dem Symbol "CREATE" bei der Erwartung eines der folgenden:'. Gibt es etwas, was ich falsch mache?

Danke für einen Blick.

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; 

**** fehlerhafte Anweisung 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

kein Orakel-Benutzer, aber wählen Sie in Struktur ist falsch ... auswählen in

von
oder versuchen Sie in mehrere Tabellen einfügen? – maSTAShuFu

+0

Sein pl/sql muss also in Variablen auswählen, die sich von sql unterscheiden. – Delta1x

+0

ich sehe .. sollte dies für varTNo Variable suchen? – maSTAShuFu

Antwort

1

Erstellen Sie die Ansicht in der SQL-Bereich:

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); 

Verwenden Sie es in der PL/SQL Geltungsbereich des Verfahrens:

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

Danke !!! Die Erwartung löste mein Problem. Zuerst lief es und es funktionierte mit der Erwartung, aber aus irgendeinem Grund gab es nicht alle Daten zurück, es war die zu viele Reihen Ausnahme für die meisten. Also tat ich wie Sie vorgeschlagen und setzen Sie And Rownum <2 in die Abfrage, löschte die Ausnahme und es funktioniert perfekt. – Delta1x

Verwandte Themen