PLSQL Datenbankname durch Variable ersetzen
lina-
- datenbank
0 King^Lully0 Frank (no reg)0 King^Lully0 Frank (no reg)1 Ilja
0 Ilja0 lina-0 Ilja0 King^Lully
moin liebes Forum :)
ich lebe noch *G* und mich plagt ein Problem... ich bin absolut neu auf dem Gebiet plsql und bin dabei mich einzuarbeiten. Leider lassen meine sql-Kenntnisse generell zu wünschen übrig :/
Folgendes Problem:
ich möchte gern den Tablespace für eine Select-Anweisung dynamisch anpassen. Geht das irgendwie?
liebe Grüße aus Berlin
lina-
Folgendes Problem:
ich möchte gern den Tablespace für eine Select-Anweisung dynamisch anpassen. Geht das irgendwie?
Du könntest eine stored procedure schreiben und den Tabellennamen als Parameter mitgeben.
Wobei ich:
Hi,
"Tablespaces" in Oracle sind mehr oder weniger mit "Datenbanken" im SQL Server zu vergleichen (von der Hierarchiestufe her).
Gruss, Frank
"Tablespaces" in Oracle sind mehr oder weniger mit "Datenbanken" im SQL Server zu vergleichen (von der Hierarchiestufe her).
http://de.wikipedia.org/wiki/Tablespace - bei MS heisst dass glaube ich Dateigruppe oder Partition oder so.
Für ein besonderes SELECT sollte man aber da wohl eher nichts anpassen...
ein bisschen komplexer ist es schon ...
In MS SQL ist die Hierarchie für gewöhnlich
Server
Datenbank
(Schema) / Benutzer
Objekt (Tabelle, View)
Eine Datenbank kann aus mehreren Dateigruppen (mit mehreren einzelnen Daten und Log Dateien) bestehen.
Für Tabellen selbst kann man mittels "Partitionierung" im MS SQL angeben, ob die Daten auf mehrere Datenbankdateigruppen verteilt werden sollen.
In Oracle (zmd meiner Meinung und Kenntnis von 8i nach) gibt es kein Mehrere-Datenbanken Konzept. Es gibt die Oracle Instanz. Und darin können in Schemas / Tablespaces Tabellen verteilt werden. Man kann identische Tabellen in verschiedenen Tablespaces haben.
Wie sich das dann noch mit der Partitionierung von Tabellen verhält, entzieht sich leider meiner momentanen Kenntnis.
Die Oracle Freaks hier dürfen mich gern berichtigen. Habe seit 8i kein weiteres Oracle benutzt und auch das ist schon ne weile her. :)
Cheers,
Frank
yo,
ein tablespace ist eine von vier logischen abstrahierungsebenen. auch können in unterschiedlichen tablespaces nicht identische tabellen gehalten werden, da sie ja den gleichen objektnamen hätten.
eine instanz unter oracle ist keine datenbank, sondern meint die prozesse und die speicherstrukturen. insofern fährt man eigentlich auch keine datenbank hoch, sondern die instance, im sonderfall sogar die instancen. die datenbank selbst wird dann gemounted.
Ein Schemta enthält kein Tablespace, sondern hat was mit den Benutzern der Datenbank zu tun. jeder Benutzer hat sein eigenes Schema, sprich lege ich einen neuen Benutzer an, dann wird dieser in aller regel seine objekte in seinem Schemata anlegen, sofern nichts anderes angegeben wird.
Ilja
yo,
ich möchte gern den Tablespace für eine Select-Anweisung dynamisch anpassen. Geht das irgendwie?
was genau willst du den anpassen, bzw. was genau hast du vor ?
Ilja
moin :)
erstmal danke für die Antworten... hat mich mit meinen spärlichen Kenntnissen leider nicht viel weiter gebracht.
Was ich hier klarstellen kann: mit tablespace meine ich das was in MySQL die Datenbanken sind... und eigentlich bin ich der Meinung mit dieser Terminologie richtig zu liegen. Man möge mich berichtigen.
Vielleich sollte ich noch mal genauer beschreiben was ich eigentlich machen will (hätt ich ja auch gleich machen können *G*)
Ich habe ein einfaches select:
select project_name from admin; (gibt mir alle vorhandenen Projekte zurück. Das besondere ist, dass für jedes Projekt ein tablespace existiert. Ein Projektname zum Beispiel lautet "Test")
ein weiteres einfaches select gibt mir nun die Klassen-ID für Kommentare zurück:
select class_id from Test.classes where class_name='Comment' (Test ist der tabelspace und classes die Tabelle)
Ich möchte die ID aber nicht nur für dieses eine Projekt sondern für alle Projekte ausgeben lassen.
Ich habe mittlerweile gelernt über ein loop (mit der Laufvariable i z.B.) durch alle Projektnamen zu wandern. Das sieht dann so aus:
for i in (select project_name from admin;)
loop
dbms_output.put_line(i.project_name);
end loop;
Leider kann ich innerhalb des Loops nicht einfach sagen: select class_id from i.project_name.classes where class_id='Comment'.
Genau hier stellt sich mir die Frage, kann ich statt "Test" als tabelspace das Ergebnis des ersten selects in einer Schleife irgendwie benutzen?
Hoffe ich konnte mein Problem halbwegs veständlich erklären...
liebe Grüße aus Berlin
lina-
yo,
Was ich hier klarstellen kann: mit tablespace meine ich das was in MySQL die Datenbanken sind... und eigentlich bin ich der Meinung mit
dieser Terminologie richtig zu liegen. Man möge mich berichtigen.
dein wille soll geschehen, was du meinst sind keine tablespaces sondern schemata. jedem benutzer ist ein eigenes schema zugeordnet, dass man und die punktnotierung ansprechen kann (schemaname.tabellenname).
Das besondere ist, dass für jedes Projekt ein tablespace existiert. Ein Projektname zum Beispiel lautet "Test")
wie oben beschrieben, das sind Schemata, sprich du hast einen benutzer mit den namen Test, dessen Schemaobjekte über den gleichen namen angesprochen werden können. was man zusätzlich dabei beachten muss, dass man entsprechende berechtigungen hat, wenn man objekte in einem anderem Schema lesen oder verändern will.
Leider kann ich innerhalb des Loops nicht einfach sagen: select class_id from i.project_name.classes where class_id='Comment'.
was du machen willst ist dynamisches PL/SQL. google doch mal ein wenig danach, ob du was brauchbares findest, wenn nicht melde dich einfach wieder hier.
Ilja
select class_id from Test.classes where class_name='Comment'
for i in (select project_name from admin;)
loop
dbms_output.put_line(i.project_name);
end loop;
Hoffe ich konnte mein Problem halbwegs veständlich erklären...
Jaja, was da so alles rauskommt.
Aber zum Thema:
Also, versuche genau zu verstehen, was der Datenserver leistet und was Deine Progrämmchen leisten. Wichtig ist, dass Du die Konzepte verstehst. Was Du KEINESFALLS machen solltest ist bspw. alle Datensätze einer Tabelle vom Server zu holen und dann in Deinem Programm einen einzelnen Satz suchen und auswerrten.
Traffic minimieren also.
Ach so, "PLSQL Datenbankname durch Variable ersetzen" lesen Wir da noch gerade, also dazu was: