select * from (:blind)

consoleone

Grünschnabel
hi

ich habe ein problem und hoffe dass jemand von euch mir dabei helfen könnte.

folgendes:
Ich muss unter oracle tabellen reorganisieren, sprich viele gleiche tabellen zu einer tabelle zusammenzufassen.

die namen der tabellen die zusammengefasst werden sollten lauten: tabelle_1, tabelle_2, ...
laufe in deiner while schlife um die den tabellenindex aus einem curser mit substr() zu bekommen

hier weite ausschnitte vom script

declare
...
cursor c_tabellen IS
select substr(
table_name,
LENGTH('tabelle_')+1,
LENGTH(table_name) - LENGTH('tabelle_') )
from user_tables
where table_name like 'tabelle_%';
...
begin
open c_tabellen;
loop
FETCH c_tabellen into tabellenindex;
exit when c_tabellen%NOTFOUND;
insert into gesamt_tabelle (wert1, wert2) from 'tabelle_'(:tabellenindex);
end;

probleme macht mir die vorletzte zeile in der ich versuche die blind-variable 'tabelle_'(:tabellenindex) zu der sinnvollen tabellenbezeichnung umzuwandeln

ich hoff jemand von euch kann mir helfen
bin noch nen ziemlicher anfänger in diesen dingen

danke im voraus

gruß andi
 
Hallo,

du kannst im PL/SQL mit dynamischem SQL dein INSERT-Statement ausführen:

SQL:
EXECUTE IMMEDIATE 'INSERT INTO tabgesamt (a,b) SELECT a,b FROM tabelle_'||TO_CHAR(tabellenindex);

In deinem speziellen Fall kann man keine Bind-Variable einsetzen, daher die Verkettung per "||"-Operator.

Noch ein Hinweis zu deinem SELECT-Statement und speziell deiner LIKE-Klausel:

Wenn du schreibst
SQL:
WHERE .... LIKE 'tabelle_%'

benutzt Oracle den Underscore "_" als Wildcard für genau ein beliebiges Zeichen.
D.h. er würde auch Tabellen finden, die "tabelle823" oder "tabelleabcde" finden.
Wenn du willst, dass Oracle nur einen Underscore an der Position findet, musst du quoten:

SQL:
WHERE ..... LIKE 'tabelle\_%';
 
hi lmarkus31

danke für die schnelle und präzise antwort.

hab alle deine vorschläge übernommen und es scheint zu funktionieren :)

weiter tests werd ich aber erst morgen durchfürn ...


gruß andi
 
Zurück