Problem mit "like" in Funktion

Hallo zusammen,

ich möchte eine Funktion schreiben, habe jedoch ein Problem das ich nicht verstehe.
Das erstellen der Funktion klappt problemlos aber wenn ich sie ausführe erhalten ich folgenden Fehler:

ERROR:  syntax error at or near "043"
LINE 17:       "kscArtikel"."ArtNr" LIKE '043%' AND 
                                          ^

********** Fehler **********

ERROR: syntax error at or near "043"
SQL Status:42601
Zeichen:445

Das hier ist der betreffende Abschnitt:

begin
    SELECT into "quotaLimit"
      "kscArtikel"."Speicherplatz"
    FROM 
      public."kscArtikel", 
      public."kscArtikelBestellt"
    WHERE 
      "kscArtikel"."ArtNr" = "kscArtikelBestellt"."ArtNr" AND
      "kscArtikel"."ArtNr" LIKE '043%' AND 
      "kscArtikelBestellt"."gebuchtBis" IS NULL AND 
      "kscArtikelBestellt"."KdNr" = $2;

Wo ist das Problem?

Gruß
Patrick

Ist ArtNr eine Spalte vom Typ integer (oder ein anderer numerischer Typ)?
LIKE kann man nur auf character Datentypen anwenden

Man könnte den Wert aber durch die Gegend casten … schneller wird das dadurch aber auch nicht.

Macht nix. Der KSC spielt eh in der zweiten Liga… :wink:

duck_und_weg
SCNR Uwe

ArtNr ist ein character varying

Dann vermute ich mal, dass Du uns nicht alles gezeigt hast. Das Statement an sich ist korrekt.



CREATE OR REPLACE FUNCTION "getFreeQuota"(uid character varying, kdnr character varying)
  RETURNS integer AS
$BODY$

declare
    "quotaLimit" integer;
    "quotaUsed" integer;
    "quotaFree" integer;

begin
    SELECT into "quotaLimit"
      "kscArtikel"."Speicherplatz"
    FROM 
      public."kscArtikel", 
      public."kscArtikelBestellt"
    WHERE 
      "kscArtikel"."ArtNr" = "kscArtikelBestellt"."ArtNr" AND
      "kscArtikel"."ArtNr" LIKE "043%" AND 
      "kscArtikelBestellt"."gebuchtBis" IS NULL AND 
      "kscArtikelBestellt"."KdNr" = $2;

    SELECT into "quotaUsed"
      sum("emlMailboxes".quota)
    FROM 
      public."emlMailboxes", 
      public."emlDomains", 
      public."kscStammdaten"
    WHERE 
      "emlMailboxes"."domainID" = "emlDomains".id AND
      "kscStammdaten".uid = "emlDomains".uid AND
      "emlDomains".uid = $1;
    
    "quotaFree" = "quotaLimit" - "quotaUsed";
    
    return "quotaFree";    
end;

$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION "getFreeQuota"(character varying, character varying) OWNER TO postgres;

Und schon ist das Problem klar:

LIKE “043%”

da müssen Single-Quotes hin (so wie Du das ursprünglich auch gepostet hast), also:

LIKE ‘043%’

In seinem ersten Post standen auch Single Quotes … darum war das syntaktisch korrekt und wir haben die Fehlermeldung anderweitig gesucht.

So, und wie rechnen wir diesen Supportfall nun ab?

Das Anlegen der Funktion mit Single Quotes hatte immer zu einem Fehler geführt.
Interessanterweise konnte ich sie gerade mit Single Quotes anlegen.

Abrechnung? Bekommst nen Kuss :rolleyes:

Jetzt kann ich die Funktion ausführen, ein Ergebnis bekomme ich aber nicht :frowning:

Jetzt funktioniert es.
select into … war falsch rum

Auch dann wäre die Fehlermeldung und der komplette Sourcecode interessant gewesen.


Abrechnung? Bekommst nen Kuss > :rolleyes: >

Bist du weiblich?