Startseite › Forum › Allgemeines › Tipps und Tricks › Forum
- This topic has 7 Antworten, 3 Teilnehmer, and was last updated vor 17 years, 11 months by Dani.
-
AutorBeiträge
-
12. April 2006 um 14:02 #108490metleckTeilnehmer
Hi!
Hat vielleicht jemand einen Tipp für ein Forum in dem man Fragen zu SQL PL/SQL… stellen kann?
Ich find leider keins im Internet
Danke12. April 2006 um 14:12 #116194AngelaModeratorDas kommt auf Deine Fragen an. 😉
Leider habe ich keine Zeit mit Dir hier ein geführtes SQL – PL/SQL Tutorium zu veranstalten. Ich kann Dir aber gerne die eine oder andere kleine Frage hier beantworten.Ein Forum, das sich ausschließlich mit diesen themengebieten beschäftigt, kenn ich leider auch nicht.
12. April 2006 um 14:14 #116196metleckTeilnehmer🙂 ok.
Ich war mir auch mnicht sicher ob ich hier sowas fragen kann, deshalb such ich halt ein Forum.
Also ich versteh nicht genau den Sinn von Packages. Ich verstehe ungefähr wie man sie erstellt aber weiß nicht warum, wieso, weshalb…?
Wenn du mir das sagen könntest wäre das echt gut!
In dem Zusammenhang vielleicht auch Prozeduren?!Ist wahrschienlich zuviel.13. April 2006 um 5:44 #116193AngelaModeratorDa kommt’s jetzt drauf an, wie viel Erfahrung Du generell mit Programmierung hast.
PL/SQL ist im Prinzip eine strukturierte Programmiersprache, d.h. es gibt die Möglichkeit einzelne Abläufe in sogenannte Prozeduren auszulagern, die dann immer wieder aufgerufen werden können. Diesen Prozeduren kann ich mittels Parametern Werte übergeben und sie können Werte zurückgeben.
Eine Besonderheit von PL/SQL ist eben diese Handhabung von Übergabe- und Rückgabewerten. In PL/SQL kann ich die Parameter einer Prozedur als
– IN (reine Eingabewerte)
– OUT (reine Rückgabewerte)
– IN OUT (sowohl Ein- als auch Ausgabewert)
kennzeichnen.Beim Aufruf der Prozedur müssen aber in jedem Fall alle Parameter mit übergeben werden (auch reine OUT Parameter!). Der Unterschied ergibt sich hauptsächlich in der aufrufenden Prozedur. Übergebe ich von dort eine Variable als IN Parameter, bleibt sie in der aufrufenden Prozedur auf jeden Fall unverändert, übergebe ich sie als OUT oder IN OUT Parameter kann sie von der aufgerufenen Prozedur verändert werden.
Erhält eine Prozedur einen reinen IN Parameter, kann der Wert dieses Parameters nicht verändert werden!Ein Beispiel:
CREATE OR REPLACE PROCEDURE test1
(iPara1 IN INTEGER,
oPara2 OUT INTEGER) IS
BEGIN
oPara2 := iPara1 + 5;
END test1;CREATE OR REPLACE PROCEDURE test2 () IS
tmpVariable1 INTEGER;
tmpVariable2 INTEGER;
BEGIN
tmpVariable1 := 3;
tmpVariable2 := 0;
test1(tmpVariable1, tmpVariable2); //Prozeduraufruf
END test2;Aus der Prozedur test2 wird die Prozedur test1 aufgerufen. Dabei werden beide in test1 definierten Parameter mit übergeben.
Der IN Parameter kann dort nicht verändert werden, wohl aber der OUT Parameter.
Beim Start von test1 ist der Wert von iPara1 = 3, der Wert von iPara2 = 0. Anschließend wird die Anweiung ausgeführt. Danach ist iPara1 nach wie vor = 3, iPara2 aber ist = 8. Ein explizites Beenden der Prozedur, z.B. über die Anweisung RETURN, ist nicht nötig. Ist die Prozedur vollständig abgearbeitet, kehrt die Verarbeitung in die aufrufende Prozedur zurück, hier also zu test 2.
In der Prozedur test2 werden die beiden Variablen am Anfang auf Initialwerte gesetzt, tmpVariable1 = 3, tmpVariable2 = 0. Danach folgt der Prozeduraufruf.
Nach dem Prozeduraufruf ist tmpVariable1 nach wie vor = 3, tmpVariable2 hat aber den neuen Wert = 8 von test1 zurückerhalten.Verständlich?
13. April 2006 um 6:01 #116192AngelaModeratorUnd Packages sind in PL/SQL, ähnlich wie in Java, in erster Linie ein Ordnungsinstrument.
Soll heißen, sie bieten mir die Möglichkeit, mehrere zusammengehörige Elemente in einem Element zusammenzufassen.
Gibt es z.B. eine bestimmte Verarbeitung auf der Datenbank, die aus 10 verschiedenen Prozeduren besteht, die sich gegenseitig aufrufen, verliert man leicht den Überblick, was zusammengehört.
Also fasst man diese 10 Prozeduren in einem Package zusammen, dadurch wird sofort erkennbar – aha, die gehören zusammen zu einem bestimmten Ablauf.Ein Package in PL/SQL besteht aus einem Head und einem Body.
Im Head des Packages werden alle Elemente definiert, die von außen, also z.B. aus einem anderen Package oder einer anderen Prozedur, aufgerufen werden sollen. Also ähnlich wie ein als public definiertes Element in einer objektorientierten Programmiersprache.
Lediglich definiert bedeutet, es wird nur der Kopf der Prozedur angegeben, aber kein Source.
Im Body werden dann die im Head definierten Prozeduren ausprogrammiert, d.h. mit Source versehen. Dabei muss jede Prozedur, die im Head definiert ist, im Body ausprogrammiert werden (sonst lässt sich das Package nicht kompilieren). Zusätzlich kann ich im Body aber weitere Prozeduren, Variablen etc. programmieren. Diese sind dann von außen nicht aufrufbar. Vergleichbar mit private in einer objektorientierten Programmiersprache.Beispiel:
//Head
CREATE OR REPLACE PACKAGE test IS
//hier wird nun eine Prozedur definiert
PROCEDURE packageTest1 (oReturn OUT INTEGER);
END test; //Ende des Head//Body
CREATE OR REPLACE PACKAGE BODY test IS
//Deklaration einer Variablen, diese ist von außen nicht sichtbar,
//gilt aber im gesamten Package test
tmpPackageVariable INTEGER;
//die im Head definierte Prozedur muss ausprogrammiert werden
PROCEDURE packageTest1 (oReturn OUT INTEGER) IS
BEGIN
oReturn := 0;
END packageTest1;
//zusätzlich können noch weitere Prozeduren definiert werden;
//diese sind dann von außen nicht aufrufbar
PROCEDURE internePackageProzedur () IS
BEGIN
tmpPackageVariable := 5;
END internePackageProzedur;
END test; //Ende des Package Bodys13. April 2006 um 13:46 #116195metleckTeilnehmerDas heißt also in Prozeduren enthalten genau dieselben Teil (deklaratiosnteil…) wie blöcke, man könnte z.b. ein prozedur schreiben , die was berechnet und wenn z.b. der Wert 3 da rauskommt soll die nächste Prozedur „abgespielt“ werden´?!
13. April 2006 um 14:13 #116191AngelaModeratorNunja, ich weiß nicht genau, was Du unter einem „Block“ verstehst (manche bezeichnen jedes PL/SQL Element als Block), ich gehe davon aus dass Du eine quasi „unbenannte“ Folge von Anweisungen in PL/SQL meinst (fängt an mit „DECLARE“).
Eine Prozedur aber ist ein selbstständiges, benanntes Element in einer Oracle Datenbank, das aus anderen Prozeduren mittels seines Namens aufgerufen werden kann und z.B. eine Berechnung durchführt. Vorteil ist, dass es unter dem Prozedurnamen in der Datenbank gespeichert ist und immer wieder verwendet werden kann.
Sagt Dir der Begriff „strukturierte Programmierung“ (auch: modulare oder prozedurale Programmierung) denn was?
Das ist nämlich genau das Prinzip, das dahintersteckt.11. Mai 2006 um 21:46 #116197DaniTeilnehmerHallo metleck
Falls du dann doch weitere Fragen hast, habe ich hier dann noch ein Link für dich:
Mfg Dani
-
AutorBeiträge
- Das Forum „Tipps und Tricks“ ist für neue Themen und Antworten geschlossen.