Hallo,
Nach einiger Nacharbeitung des vorgenannten Codes bin ich zu folgendem Code gelangt:
Code:
DECLARE passed BOOLEAN;
BEGIN
Select pcon.pcontype as typepro
from pcon
where (pcon.symbol = pconpro);
if (typepro = 'SecondaryMaster') then
begin
Select pcon.pcontype as typereac
from pcon
where (pcon.symbol = pconreac);
if (typereac = 'PrimaryMaster') then
passed: = true;
else
passed := false;
end if;
end;
if (typepro = 'Product') or (typepro = 'MineralsSolids') then
begin
Select pcon.pcontype as typereac
from pcon
where (pcon.symbol = pconreac);
if (typereac = 'PrimaryMaster') or (typereac = 'SecondaryMaster') then
passed := true;
else
passed : = false;
end if;
end;
liefert folgenden " Funktionstext und Fehlermeldung:
SQL Fehler:
FEHLER: Fehler »syntax error« am Ende der Eingabe at character 781
In der Anweisung: Code:
CREATE FUNCTION "IsvalidEntry" (IN pconpro text,IN pconreac text) as '
DECLARE passed BOOLEAN;
(obiger Code mit verdoppelten Hochkommas)
LANGUAGE "plpgsql"
Sicher könnte ich auch noch ein paar Stunden mehr daran rumprobieren, aber das erscheint mir uneffectiv. Ein Buch zu dieser Postgres-SQL Version wurde eher abgelehnt, da ja sowieso eine neue Version für irgendwann geplant ist. Der Fehler taucht angeblich an einer Stelle auf, die jedoch gar nicht existiert, da die Anzahl der Zeichen kleiner ist als die angegebene Stelle...
was mich zu dem Schluss verleitet, dass entweder
kein Ende gefunden wird oder er irgendein Zeichen vermisst und dieses bis zur letzten Zeile sucht....
Das Einzige was mir aufgefallen ist, besteht in dem nicht vorhandenem
Bezeichner für das Boolean -Ergebnis: returns boolean as .....
danach kommt gar nichts, jedoch sehe ich nicht wie ich das ändern kann, da
1. die gesamte Funktionsbezeichnung aus den Einträgen bei der Funktionserstellung entsteht, wo bei mir kein Feld mit einem verfügbarem Eintrag ist,
2. bei Reinkopieren und Modifikation dieser erzeugten Zeile gar nichts mehr funktioniert, da diese Zeile dann auch noch mal erzeugt wird und zu Chaos führt (einer meiner ersten Fehler, da das nirgends geschrieben steht).
Ferner ist mir aufgefallen:
Wenn ich alles eingetragen habe, sieht meine Vorgabe etwa so aus (Nach x Versuchen eine Graphik o. ä. einzufügen, nun die Beschreibung per Schrift):
Block: Name Liefert Sprache
"IsValidEntry" "(leeresFeld1)" "Boolean" "(leeres Feld2)" "PLPGSQL"
Block: Mode Name Type (Block zum hinzufügen)
"IN" "pconpro" "Text"
"IN" "pconreac" "Text"
leeres Feld1: "Set of" auswählbar
leeresFeld2 nur "[]" auswählbar
Das Feld links neben der Sprache (PL-PG SQL) ist mir zwar nicht ganz klar, aber ich hätte dort irgendwo den Bezeichner hinter dem "as" gesucht...
Wenn ich dann versuche, die Funktion zu erstellen und ein Fehler auftritt, dann ändert sich die Vorgabe zu folgendem Bild:
Block: Name Liefert Sprache
"IsValidEntry" "(leeresFeld1)" "Boolean" "(leeres Feld2)" "PLPGSQL"
Block: Mode Name Type (Block zum hinzufügen)
"(leeresFeld3)" "pconpro" "(leeresFeld45)"
"(leeresFeld3)" "pconpro" "(leeresFeld45)"
leeres Feld1: "Set of" auswählbar
leeresFeld2: nur "[]" auswählbar
leeresFeld3: nur " " auswählbar
leeresFeld45: 2 dicht nebeneinander liegende leere Felder, die nur etwa 3 mm breit sind, nur Leerzeichen auswählbar (statt Text)
Diese sinnlose neue Vorgabe führt dann bei einem neuen Erstellungsversuch zum Fehler:
"Typ p schon definiert."
Also muss ich alle Argumente neu eintragen, mindestens bei jedem 2.Mal...
Weiss jemand woher das kommt ?
Kann mir jemand den Fehler im Code sagen ?
Vielen Dank im voraus...
Thomas
Lesezeichen