1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Stored Function mit group_concat

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von GoatMachine, 29 August 2013.

  1. GoatMachine

    GoatMachine Benutzer

    Hallo, ich würde gerne eine eigene Funktion erstellen, die meine SQL Befehle etwas übersichtlicher gestalten könnte und vor allem die komplette Seite Redundanzenfreier macht.

    Aus diesem Grund wollte ich anfangen, aus den group_concat Funktionen die ich habe, eine Stored Function zu kreieren. Leider funktioniert das ganze nicht so wie gewollt.

    Ich nutze die MariaDB in der Version 5.5.32.

    Versuch 1:
    PHP:
    DELIMITER $$
    CREATE FUNCTION SprachenListe(
    paramTable VARCHAR50 )
    RETURNS TEXT DETERMINISTIC BEGIN
    DECLARE Ausgabe TEXT;
    SET @tableName paramTable;
    SELECT GROUP_CONCATDISTINCT @tableName.Sprache ORDER BY @tableName.Sprache SEPARATOR  '/' INTO Ausgabe;
    RETURN(
    Ausgabe);
    END ;
    $$
    DELIMITER ;
    Befehl wird ausgeführt, doch wenn ich die Funktion später aufrufen will, bekomme ich nur null Werte.

    Versuch 2
    PHP:
    DELIMITER $$
    CREATE FUNCTION SprachenListe(
    paramTable VARCHAR50 )
    RETURNS TEXT DETERMINISTIC BEGIN
    DECLARE Ausgabe TEXT;
    SET @tableName paramTable;
    SELECT GROUP_CONCATDISTINCT @tableName.Sprache ORDER BY @tableName.Sprache SEPARATOR  '/' INTO Ausgabe FROM @tableName;
    RETURN(
    Ausgabe);
    END ;
    $$
    DELIMITER ;
    Diesen Befehl kann ich noch nicht einmal ausführen, dort bekomme ich direkt eine Fehlermeldung:
    Hat vielleicht jemand eine Idee, wo der Fehler liegt? Ich habe mich das erste mal an Stored Functions versucht.
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Ich nix MySQL oder MariaDB, aber ich denke mal, wenn Du den Tabellennamen als Parameter übergibst wirst Du EXECUTE nutzen müssen.
     
  3. GoatMachine

    GoatMachine Benutzer

    Ok, dies habe ich jetzt gemacht, aber trotzdem kommt noch ein Fehler.

    PHP:
    DELIMITER $$
    CREATE FUNCTION SprachenListe(
    paramTable VARCHAR50 )
    RETURNS TEXT DETERMINISTIC BEGIN 
    DECLARE Ausgabe TEXT;
    SET @tableName paramTable;
    EXECUTE IMMEDIATE CONCAT('SELECT GROUP_CONCAT( DISTINCT ', @tableName.Sprache' ORDER BY ',@tableName.Sprache,' SEPARATOR  ','/',' ) INTO ',Ausgabe,' FROM ',@tableName);
    RETURN(
    Ausgabe);
    END ;
    $$
    DELIMITER ;
    Ich frage mich, was ich übersehe -.-
     
  4. akretschmer

    akretschmer Datenbank-Guru

    keine Ahnung...

    Code:
    test=*# select * from goatmachine ;
      t
    ------------
     kurzdemo
     in
     postgresql
    (3 rows)
    
    test=*#
    test=*#
    test=*#
    test=*# create or replace function liste(tablename text) returns text as $$ declare ret text; begin execute E'select array_to_string(array_agg(t),\' \') from ' || tablename into ret; return ret; end;$$language plpgsql;
    CREATE FUNCTION
    test=*# select * from liste('goatmachine');
      liste
    ------------------------
     kurzdemo in postgresql
    (1 row)
    
    Andreas
     
  5. ukulele

    ukulele Datenbank-Guru

    Zum debuggen solltest du dir das, was in EXECUTE() an Text steht auch mal als solchen ausgeben lassen ob dort die Syntax wirklich passt.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden