CURSOR mit VARIABLE

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • CURSOR mit VARIABLE

    Hallo zusammen,
    seit kurzem muss ich mich mit stored procedures auseinander setzen und nach der 1. woche muss ich sagen mysql kann schon eine ganze menge mittlerweile.
    leider bin ich seit gestern an einem problem hängen geblieben was einfach keine lösung zu haben scheint und mittlerweile glaube ich das mein weg zur lösung des problems nicht der richtige sein kann. auch hat der 2. tag recherche nicht viel eingebracht und somit hoffe ich auf euch.

    Eigentlich ist es ganz simple:
    1: Eine stored Procedure befüllt eine Variable "tempstring" mit einem String der letztendlich die Bedingung für ein IN() werden soll.
    2: Es soll mit einem CURSOR durch das Ergebnis der Abfrage durchgelaufen werden.
    z.B.:
    DECLARE cur1 CURSOR FOR SELECT * FROM tablename WHERE fieldname IN(tempstring)

    Aber irgendwie sehe ich einfach nicht was daran falsch ist oder wie man so was macht. Wenn ich Das statement so abschicke bekomme ich keine ausgabe. Wenn ich die Variable mit ihrem Inhalt den ich mir ja ausgeben lassen kann ersetze dann funktioniert alles. Was für mich heisst die Variable wird nicht als solche erkannt.
    Wenn ich das ganze jetzt dynamisch aufbaue habe ich immer Probleme zum Besipiel mit dem Continue Handler.

    Also irgendwie geht es so nicht. Da ich keine Tutorials oder so finden konnte wäre allein die INFO schon mal gut ob man den CURSOR mit PREAPRE und EXECUTE aufbauen kann oder zum Beispiel einfach nur das mal jemand sagt so schon mal gar nicht aber schau mal hier.
    Viel Dank
    Realismus hilft beim Träumen nicht weiter!!!

  • #2
    Hallöchen!

    Daran seh ich jez erstmal keinen Fehler so spontan, aber wie wärs denn du mal deine ganze Prozedur posten würdest? Vielleicht könnte man dann aus dem Kontext mehr erkennen.
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

    Kommentar


    • #3
      hm bin mir nicht sicher ob das jetzt noch was hilft aber hier mal die kurzfassung der procedure

      als problem ist immer noch die variable tempquery wenn man den inhalt direkt in den IN() Teil schreibt funktioniert alles aber wenn man die variable so stehen lässt dann habe ich kein result

      DELIMITER ||
      DROP PROCEDURE IF EXISTS getsearchList||
      CREATE PROCEDURE getsearchList()
      BEGIN
      DECLARE done INT DEFAULT 0;
      DECLARE tempquery VARCHAR(255) DEFAULT "'A_ART_ID','A_BERUF_ID'";
      DECLARE suchparametera,prioa,searchviewa,feldnamea VARCHAR(255);

      DECLARE cur1 CURSOR FOR SELECT suchparameter,prio,searchview,feldname FROM t_search_parameter WHERE t_search_parameter.suchparameter IN(tempquery) ORDER BY t_search_parameter.prio,t_search_parameter.searchview;
      DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;

      OPEN cur1;

      REPEAT
      FETCH cur1 INTO suchparametera,prioa,searchviewa,feldnamea;
      IF NOT done THEN
      INSERT INTO debug SET name=suchparametera,description=searchviewa;
      END IF;
      UNTIL done END REPEAT;

      CLOSE cur1;
      END
      Realismus hilft beim Träumen nicht weiter!!!

      Kommentar


      • #4
        versuch bite mit
        where FIND_IN_SET(t_search_parameter.suchparameter, tempquery) IS NOT NULL
        Slava
        bituniverse.com

        Kommentar


        • #5
          hm bekomme nur die Fehlermeldung

          FUNCTION FIND_IN_SET does not exist

          dabei sollte die Funktion doch MySQL Standard sein oder?
          habe das ganze hier mit WAMP laufen MySQL version :
          5.0.15-nt
          Realismus hilft beim Träumen nicht weiter!!!

          Kommentar


          • #6
            allerdings bekomme ich ein Result wenn ich das hier mit dem Query Browser abschicke
            SELECT FIND_IN_SET('b','a,b,c,d');
            jetzt bin ich verwirrt. kann es sein das es nicht geht weil es in der procedure ist
            Realismus hilft beim Träumen nicht weiter!!!

            Kommentar


            • #7
              Original geschrieben von 0413
              jetzt bin ich verwirrt. kann es sein das es nicht geht weil es in der procedure ist
              jetzt bin ich auch verwirrt
              keine Ahnung, warum die funtion nicht erkannt wird?
              Slava
              bituniverse.com

              Kommentar

              Lädt...
              X