REFCURSOR mit WHERE IN – ORACLE PL/SQL » Syntax kurz erklärt

Die Aufgabenstellung besteht darin, mit einer dynamischen Werteliste die IN Klausel innerhalb einer WHERE-Anweisung zu bestücken.

Der Ansatz soll ohne zusätzliche TYPE-Deklaration etc. erfolgen, somit ist die Überlegung, diese Hearusforderung mit einem Oracle REFCOSOR zu lösen entstanden.

Vorbereitung:

  • Anlegen einer Tabelle DEMO mit Spalte DEMO_ID und 3-4 Datensätzen mit den Werten 4711, 5711, 6711 und 7711




1. REFCURSOR » variable „IN List“



1.1 Beispiel mit Flag 1

Aufgabe

FALL: 1  -  Schalter 1 und V_SQL_1 gelangt zum Einsatz

-- einfache - Variable "IN List" mit REFCURSOR

declare
 -- CURSOR Definition
 c_demo sys_refcursor;
 -- INTO-Variable Definition
 v_demo my.demo.demo_id%type; 
 -- SQL-Variable Definition
 v_sql_000 clob := 'select demo_id 
                      from demo
                     where 1=1
                       and to_char(demo_id) in ';
 v_sql_1 clob := v_sql_000||'(''4711'')'; 
 v_sql_2 clob := v_sql_000||'(select demo_id 
                                from demo)';
-- LOGIK 
begin
-- Entscheidung Einzelwert oder Liste / OPEN CURSOR
 case '1'
      when '1' then
          open c_demo for v_sql_1; 
      when '2' then
          open c_demo for v_sql_2; 
 end case;
-- Schleife zum Auslesen des Cursors 
 loop
    fetch c_demo into v_demo;
    exit when c_demo%notfound;
    dbms_output.put_line('# - '||v_demo); -- Ausgabe der aktuellen Variable
 end loop;
-- CLOSE CUSROR 
   close c_demo; 
end;

1.2 Beispiel mit Flag 2

Aufgabe

FALL: 2  -  Schalter 2 und V_SQL_2 gelangt zum Einsatz

-- einfache - Variable "IN List" mit REFCURSOR

declare
 -- CURSOR Definition
 c_demo sys_refcursor;
 -- INTO-Variable Definition
 v_demo my.demo.demo_id%type; 
 -- SQL-Variable Definition
 v_sql_000 clob := 'select demo_id 
                      from demo
                     where 1=1
                       and to_char(demo_id) in ';
 v_sql_1 clob := v_sql_000||'(''4711'')'; 
 v_sql_2 clob := v_sql_000||'(select demo_id 
                                from demo)';
-- LOGIK 
begin
-- Entscheidung Einzelwert oder Liste / OPEN CURSOR
 case '2'
      when '1' then
          open c_demo for v_sql_1; 
      when '2' then
          open c_demo for v_sql_2; 
 end case;
-- Schleife zum Auslesen des Cursors 
 loop
    fetch c_demo into v_demo;
    exit when c_demo%notfound;
    dbms_output.put_line('# - '||v_demo); -- Ausgabe der aktuellen Variable
 end loop;
-- CLOSE CUSROR 
   close c_demo; 
end;


 

  ctpm.events 📅  
  Anzeige  

Oracle und PL/SQL sind eingetragene Warenzeichen der Oracle Corporation.


Datenbank & Internet

IT-Seminare, Kurse, Workshops oder Stammtisch


Ihre Fragen und Anmerkungen sind jederzeit willkommen.

(Link)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

%d Bloggern gefällt das: