Auf Thema antworten

Zu Deinen Fragen:


  • plpgsql ist eine Sprache, die z.B. auch Schleifen enthält. SQL kennt sowas nicht. Du kannst also Deine Funktion nicht als SQL definieren.
  • das $$ separiert den Quelltext des Funktion. Früher war das mal ', mit dem Nebeneffekt, daß man ' dann nicht mehr direkt im Funktionsbody verwenden konnt. Das zog lange Quoting-Orgien nach sich. Du kannst auch z.B. $BLA$ oder $meine_coole_Funktion$ um den Body herum verwenden.
  • mit SET kannst Du dynamisch Konfig-Parametern ändern, das willst Du aber gar nicht, daher einfach weglassen. Nicht weglassen dafür aber ; am Ende. Kurzdemo:

    [code]
    test=*# create or replace function bla() returns text as $$ declare my_int_var int; my_text_var text; begin my_int_var = 0; my_text_var = ''; while my_int_var < 5 loop my_int_var=my_int_var+1; my_text_var = my_text_var || my_int_var::text; end loop; return my_text_var; end; $$ language plpgsql; 
    CREATE FUNCTION
    test=*# select * from bla();
      bla 
    -------
    12345
    (1 row)

    test=*# create or replace function bla() returns text as $$ declare my_int_var int; my_text_var text; begin set my_int_var = 0; my_text_var = ''; while my_int_var < 5 loop my_int_var=my_int_var+1; my_text_var = my_text_var || my_int_var::text; end loop; return my_text_var; end; $$ language plpgsql; 
    CREATE FUNCTION
    test=*# select * from bla();
    FEHLER:  unbekannter Konfigurationsparameter »my_int_var«
    CONTEXT:  SQL-Anweisung »SET my_int_var = 0«
    PL/pgSQL-Funktion bla() Zeile 1 bei SET
    test=*#
    [/code]


Hope that helps, Andreas


Zurück
Oben