|
Willkommen im Forum für Fachinformatiker Ausbilder und Azubis. Sie betrachten unser Forum derzeit als Gast und haben damit nur eingeschränkten Zugriff zu Diskussionen und den weiteren Funktionen. Wenn Sie sich kostenlos registrieren, haben Sie folgende Vorteile:
|
|
|
|||||||
![]() |
|
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|
#1 |
|
Neuer Benutzer
Registriert seit: 21.12.2005
Beiträge: 16
![]() |
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 Danke |
|
|
|
|
|
#2 |
|
Erfahrener Benutzer
Moderator
Registriert seit: 04.12.2003
Ort: Regensburg
Beiträge: 2.943
![]() |
Das kommt auf Deine Fragen an. :wink:
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.
__________________
Ich: http://www.fi-ausbilden.de/forum/sho...74&postcount=3 |
|
|
|
|
|
#3 |
|
Neuer Benutzer
Registriert seit: 21.12.2005
Beiträge: 16
![]() |
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. |
|
|
|
|
|
#4 |
|
Erfahrener Benutzer
Moderator
Registriert seit: 04.12.2003
Ort: Regensburg
Beiträge: 2.943
![]() |
Da 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?
__________________
Ich: http://www.fi-ausbilden.de/forum/sho...74&postcount=3 |
|
|
|
|
|
#5 |
|
Erfahrener Benutzer
Moderator
Registriert seit: 04.12.2003
Ort: Regensburg
Beiträge: 2.943
![]() |
Und 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 Bodys
__________________
Ich: http://www.fi-ausbilden.de/forum/sho...74&postcount=3 |
|
|
|
|
|
#6 |
|
Neuer Benutzer
Registriert seit: 21.12.2005
Beiträge: 16
![]() |
Das 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´?!
|
|
|
|
|
|
#7 |
|
Erfahrener Benutzer
Moderator
Registriert seit: 04.12.2003
Ort: Regensburg
Beiträge: 2.943
![]() |
Nunja, 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.
__________________
Ich: http://www.fi-ausbilden.de/forum/sho...74&postcount=3 |
|
|
|
|
|
#8 |
|
Neuer Benutzer
Registriert seit: 11.05.2006
Beiträge: 8
![]() |
Hallo metleck
Falls du dann doch weitere Fragen hast, habe ich hier dann noch ein Link für dich: http://forum.2lucky.de/ Mfg Dani
__________________
Azubisonline>> Wir suchen noch Teammitglieder |
|
|
|
![]() |
| Lesezeichen |
| Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
| Themen-Optionen | Thema durchsuchen |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| SEO URLs im Forum | Thomas | Webseite | 0 | 22.04.2006 16:51 |
| Aufbau Forum | bear | Webseite | 5 | 16.02.2006 15:17 |
| Neustrukturierung Forum? | Thomas | Webseite | 42 | 06.12.2005 13:38 |
| fi-ausbilden-Forum und google | Thomas | Webseite | 4 | 16.12.2004 08:24 |