Um eine komplexe Positionsnumerierung zu realisieren, habe ich mich zum ersten Mal mit PL/pgSQL versucht. Das Formulieren und Ausführen der Funktion hat auch geklappt, wenn ich pgAdmin III verwende.
Da ich das aber in einem Java Projekt mit dbmaintain automatisieren möchte, stört mich die Fehlermeldung die ich bei dbmaintain, aber auch beim Anlegen eines Beispielscripts in der Netbeans bekomme:
CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $a$
BEGIN
RETURN subtotal * 0.06;
END;
$a$ LANGUAGE plpgsql;
liefert als Fehler:
Error code 0, SQL state 42601: FEHLER: Dollar-Quotes nicht abgeschlossen bei »$a$
BEGIN
RETURN subtotal * 0.06«
Position: 58
Line 1, column 1
Executed successfully in 0 s, 0 rows affected.
Line 4, column 1
Error code 0, SQL state 42601: FEHLER: Dollar-Quotes nicht abgeschlossen bei »$a$ LANGUAGE plpgsql«
Position: 1
Line 5, column 1
Execution finished after 0 s, 2 error(s) occurred.
Ich habe schon viel gegoogelt, aber noch keine Lösung gefunden. Auch umstellen auf eine Zeile zwischen den $$ Quotes hat nicht geholfen.
Sieht alles gut aus und funktioniert auch bei mir.
Mit was für einem SQL Tool lässt Du das denn laufen?
Vermutlich musst Du dem Tool sagen, dass das alles ein statement ist, und nicht beim ersten ; zu Ende ist
Ja, das ist richtig, da bin ich dann wahrscheinlich im falschen Forum. Ich verwende die IDE Netbeans 7.3 mit postgresql-9.1-901.jdbc4.jar, und DbMaintain - Index, beide mit dem gleichen Fehlerbild. Weiss derzeit nicht, wo ich da hinfassen muss.
Netbeans war nur zum Verfassen des Scripts und Testen gedacht. Ich weiß vom Googlen her, dass SquirrelSQL das gleiche Problem hat. pgAdmin parsed offensichtlich besser.