SQL mit Shellskripten

oraclin25

Erfahrenes Mitglied
Hallo zusammen :),

beim Lernen von SQL bin ich auf ein Thema gestoßen, wo ich keinen Nutzen sehe. Nämlich SQL-Skripte mittels Shellprogramme(Perl, Ruby oder sogar OS-Shell). Warum sollte man eigentlich den Aufruf bestimmter SQL-Skripte mittels dieser Shellskripte anstoßen? Könnte man nicht direkt die SQL-Skripte ausführen?

Vielen Dank zusammen.

Schöne Grüße aus Rheinland,

Eure Ratna;)
 
Hallo sheel :D,

vielen Dank erstmal. Ein Beispiel(habe ich aus Netz gezogen) ist:

#!/usr/bin/ksh
Blah=$1
....

sqlplus system/manager@testdb1 << EndOfFile
select * from dual ;
{blah blah blah}
quit
EndOfFile

{more shell script}


Ich habe wenig Erfahrung mit Linux, daher langsam :p:
die Zeile #!/usr/bin/ksh besagt, dass bitte den Shell ksh aufrufen, richtig? Es gibt andere Varianten wie bash usw.

Die Zeile Blah=$1:
Blah ist ein Variablennamen? Belegt mit Integerwert 1?

Danach wird sqlplus aufgerufen, somit befinden wir uns in dem Client sqlplus. Hier werden dann die SQL-Skripte weiter verarbeitet.

Das Schlüsselwort quit gehört zu sql-Befehl oder OS-Shell?

Und nun was mich am meisten stutzig macht:
Warum machen wir das ganze in Form eines Shell-Skriptes. Warum nicht einfach sqlplus öffnen, und von da aus die SQL-Skripte ausführen?

Vielen lieben Dank.

Schöne Grüße aus Rheinland,

Eure Ratna:)
 
Ich tippe mal, du kannst so einfach die Datei anpassen, anstatt die Aufrufe (beim Server start, cron oder ähnliches) ändern zu müssen. Außerdem wir es ziemlich unübersichtlich, wenn du alle Abfragen in eine Zeile quetschen musst.
 
@oraclin:

Also:

"#!/usr/bin/ksh" hast du richtig erkannt, ist die Kornshell
Andere sind Bash, Csh...
die unterscheiden sich hauptsächlich in der Schreibweise

Das mit dem $1: Das ist der erste Parameter.
Wenn du das Skript in einer Datei "sql.sh" speicherst kannst du es ja normalerweise
mit "./sql.sh" aufrufen. Wenn du jetzt einen Parameter "blub" übergibst:
"./sql.sh bla" dann ist blub in $1.
Und mit der Zuweisung hast du dann einen Variablennamen Blah mit dem Wert blub.

Die Schreibweise
Code:
sqlplus << EndOfFile
...
EndOfFile
bewirkt, dass alles zwischen den zwei EndOfFile auch noch zum sqlplus-Befehl gehört.
So kann man es über mehrere Zeilen aufteilen.

quit gehört noch zum SQL-Teil, ja.


Und warum ihr das als Shellskript macht:
Willst du die Befehle jedesmal neu eingeben? Nein?
Das ist der einzige Grund.

Wenn man tausend Zeilen hat, die man alle 10 Minuten braucht,
ist man über so eine Möglichkeit froh.
Einmal eingeben und mit einem kleinen Befehl alles starten.
 
Halli hallo,

super, vielen lieben Dank zusammen. Super erklärt, sheel.:D

Ich habe eine letzte Frage für heute, bevor der ganze Sonntag nur mit Computer verbracht wird:rolleyes: :

Ich bin auf ein Thema gestoßen, wo zur Extraktion von Datenquellen, um ein Datawarehouse zu erstellen, mittels Snapshotsvergleich implementiert wird. Ich gegoogelt gegooglet:

What is snapshot with reference to data warehouse?
A snap shot is a process of knowing about the activities performed. Snap shot is stored in a report format from a specific catalog. The report is generated soon after the catalog is disconnection.

Mein Englisch ist leider nicht gut:(, ich konnte nur waage andeuten, was das wirklich heißt.
Ich versuche mal:
Zur jeder operativen Änderung wird also ein sogenanntes Snapshot erstellt. Diese Snapshots sind in einem speziellen Katalog gespeichert. Wenn ich also Daten extrahieren möchte, muss ich die Verbindung zwischen dem Katalog und den operativen Vorgängen kurz abbrechen, danach hole ich aus dem Katalog all die Snapshots und futtere sie in mein Datawarehouse. Ist das richtig?

Falls ihr euch damit bestens auskennt:
Diese Art von Datenextraktion, wie wird sie konkret implementiert? Mittels SQL vielleicht? Muss man dem Datenbanksystem im Voraus mitteilen, dass es bei jeder operativen Änderung doch bitte einen Snapshot davon macht und bitte ins Katalog reintut?

Vielen lieben Dank zusammen.

Schöne Grüße aus Rheinland,

Eure Ratna:)
 
Zurück