Funktion nur innerhalb einer Funktion verwenden

Ludwigmller

SQL-Guru
Beiträge
168
Guten Morgen,
Gibt es eine Möglichkeit eine Funktion nur innerhalb einer anderen Funktion zur Verfügung zu stellen?
Die "zweite" / innere Funktion wird nur dort gebraucht, und würde, wenn ich diese seperat erstellen würde, die Liste der Funktionen nur unnötig verlängern und für Unübersichtlichkeit sorgen....

Gruß
Ludwig
 
Werbung:
die Liste der Funktionen nur unnötig verlängern und für Unübersichtlichkeit sorgen....

ich glaube, Du siehst hier ein Problem wo keines besteht. PG kann durchaus sehr viele Objekte (Objekte können u.a. Schemas, Tabellen, Views, Indexe, Funktionen, Trigger, ... sein) verwalten. Ich habe Installationen gesehen, wo man für jeden einzelnen Kunden ein eigenes Schema mit je mehreren hundert Tabellen, Indexex etc. erstellt hat - und es gab einige Zehntausend Kunden. Das hat zu etlichen Millionen einzelnen Objekten geführt. Ich nehme an, von solchen Zahlen bist Du noch ein Stück entfernt.
 
Ist das eher ein Problem der Übersichtlichkeit, der Performance (akretschmer hat es ja schon beschreiben) oder der Berechtigungen für dich?
 
Das habe ich auch schon überlegt. Mittlerweile haben sich schon einige Tabellen und Funktionen angesammelt. Da wenn Funktionen auch andere Funktionen aufrufen und Tabellen abfragen, ist das Verschieben nicht mal eben getan. Deswegen überlege ich noch wie ich das am besten gliedere
 
Du kannst das aus Perspektive eines Interface betrachten. Das Interface, also public Funktionen einer API, ist für alle Nutzer zugreifbar und liefern ein „offizielles“ Set an Funktionen, die zur Nutzung der API notwendig und sinnvoll sind. Dabei gibt es oft auch unterschiedliche Perspektiven.

Lagerhaltung als Beispiel
Es gibt vielleicht nur ein paar Funktionen für bestimmte Benutzer:
Einlagern(LagerID, ProduktID, Menge)
Auslagern(LagerID, ProduktID, Menge)
BestandsMenge(LagerID, ProduktID)
Kapazität(LagerID)

Andere Benutzer, die mit Kommissionierung beschäftigt sind, brauchen Zugriff auf Lagerplätze, Inventurfunktionen, Pickfunktionen ..

Und es gibt Funktionen, die kein Mensch braucht, außer der Entwickler. (Und die auch niemand benutzen soll, nicht öffentliche Funktionen halt.) Hierzu zählen vielleicht auch die wirklichen Tabellen, auf die nur mit internen Funktionen / Rechten zugegriffen werden kann. Öffentlicher Zugriff zur Datenabfrage existiert evtl. nur über Views. Funktionen und Views, die nur eine Fassade auf eine Kernfunktion sind, erleichtern auch Änderungen und Umbau. Eine bestimmte Tabellenerweiterung muss in vielen Views vielleicht gar nicht eingefügt werden, weil sie für die API keine Relevanz hat. Oder eine grundlegende Umstrukturierung wird von den API Views schlicht verborgen.

Das alles sollte immer recht nah am Bedarf entlang gemacht werden, damit man sich nicht verzettelt.

Es ist nicht unbedingt trivial, so etwas brauchbar zu entwerfen. Es sollte aber nicht ein Kriterium sein, wie sehr die eine oder andere Funktion nervt, weil sie alphabetisch ganz vorne steht, obwohl sie selten verwendet wird oder irgendsowas.

Man könnte es auch so machen. Datenmodell und alle Funktionen entwerfen, die benötigt werden ohne Rücksicht auf Nutzergruppen usw.. Am Ende daraus ein Set (Teilmenge) von getesteten und notwendigen Funktionen und Views für bestimmte Anwendungsfälle in einem neuen Schema bereitstellen.
 
Danke für die ausführliche Antwort.
Ich bin bei meinem Projekt einziger Anwender und Entwickler. Es geht eigentlich nur darum, dass ich mich selbst zurecht finde, aber würde es natürlich auch gerne so professionell wie der Aufwand sich lohnt machen.
Die Liste der Funktionen ist einfach zu lang, und da sie alphabetisch geordnet ist und ich nur zwei Schema habe, ist alles durcheinander. Möchte ich eine Funktion aufrufen, geht das Suchen des Namens los...
Im Moment sind die Namen der Funktionen auch ziemlich lang geworden, weil der naheliegendste Name schon vergeben war. Da ich jetzt einen weiteren, größeren Projektzweig einfügen möchte ist wohl ein guter Zeitpunkt zum Neuorganisieren gegeben.

Wie würde man das eigentlich in MySQL machen, wo es keine Schema gibt? 😅
 
Vielleicht ist auch die Funktion selbst überflüssig. Vermutlich läßt sich der Inhalt beider Funktionen auch kombinieren um den Vorgang in einer Funktion abzubilden.
 
Werbung:
Also die Tatsache, das diese Funktion nur von einer anderen aufgerufen wird zeigt eigentlich, das es kein Bedarf gibt das zu trennen. Vielleicht ist das einfach zu kleinteilig gedacht. Über welchen Umfang reden wir denn? Gibt es verschiedene Versionen die eine Rolle spielen?
 
Zurück
Oben