2016-07-27 4 views
-1

Ich versuche, einen kleinen PL/SQL-Block zu schreiben, in dem eine winzige Abfrage läuft. Problem ist, dass ich nicht ganze Daten durch Abfrage zurückgegeben sehen möchte, sondern um zu sehen, ob etwas existiert oder nicht. Mein Block sieht wie folgt aus:PL/SQL - Zeile setzen, während Datensätze gefunden und nicht gefunden werden

procedure check_data as 
table_data varchar2; 
BEGIN 
     SELECT * into table_data FROM (
    with temp_table as (select a_number, a_group, a_date from table1 
        where a_id in (15) 
        ) 
     SELECT b_city, b_district, b_nationality, b_age 
     FROM table2 JOIN temp_table ON a_id=b_id 
     WHERE b_age>=10 
     and b_age<23 
       ORDER BY b_nationality DESC); 

    IF SQL%FOUND THEN 
       raise_application_error(-20001,'OK, found something') 
    else DBMS_OUTPUT.PUT_LINE ('found nothing!'); 
    end if; 
    end; 

Allgemeinen kämpfen mit temp_table erklärt (ich PLS-00201: Bezeichner ‚table_data‘ deklariert werden muss) und setzen die Ergebnisse auf dem Bildschirm.

Ich werde für irgendwelche Tipps dankbar sein.

+4

http://stackoverflow.com/questions/3434437/whats-the-most-efficient-way-to-check-if-a-record-exists-in-oracle – Rene

+0

@ mc88. Bitte stellen Sie sicher, dass Sie auch die Tabellen-DDL veröffentlichen, wenn Sie möchten, dass jemand an Ihrem nicht funktionierenden Code arbeitet. – XING

+0

Welche Struktur von table_data? Was willst du, wenn eine Abfrage existiert - in etwas auswählen? –

Antwort

0

Probieren Sie jetzt dies:

create table table1(a_id number,a_number number, a_group varchar(10), a_date date) 

create table table2 (b_id number,b_city varchar(10), b_district varchar(10), b_nationality varchar(10), b_age number) 

create or replace procedure check_data as 
table_data varchar2(100); 
BEGIN 
     SELECT * 
     into table_data 
     FROM (
     with temp_table as (select a_id, a_number, a_group, a_date 
          from table1 
          where a_id in (15) 
        ) 
     SELECT 1 
     FROM table2 
     JOIN temp_table ON a_id = b_id 
     WHERE b_age>=10 
     and b_age<23  
     ORDER BY b_nationality DESC) 
     where rownum < 2 ; 

    IF SQL%FOUND THEN 
     raise_application_error(-20001,'OK, found something'); 
    Else 
    DBMS_OUTPUT.PUT_LINE ('found nothing!'); 
    End if; 
    end; 

Seine adaequat und gut zusammengestellt. Implementieren Sie jetzt den Expertenvorschlag, damit es funktioniert. Ich schaue nicht in deine Logik. Ich erhalte nur deinen Code kompiliert.

Verwandte Themen