Problem in View mit lokaler Variable

LetziTetzi

Benutzer
Beiträge
9
Hallo liebe Forumsmitglieder,

ich bin ein Neueinsteiger auf diesem Gebiet und verstehe nicht, wieso folgender View nicht funktioniert.

Ich habe schon getestet, woran es liegt und es stellte sich heraus, dass gesamtkapa im View nicht akzeptiert wird. Sobald ich dort direkt eine Zahl eingebe, geht es, er hat anscheind Probleme die Zahl in gesamtkapa zu benutzen.. ? Kann das sein, oder liegt das Problem ganz wo anders, wer kann mir helfen?

Ich bedanke mich jetzt schon recht herzlich für jegliche Kommentare :)
 

Anhänge

  • Zwischenablage-1.jpg
    Zwischenablage-1.jpg
    51,4 KB · Aufrufe: 6
Werbung:

LetziTetzi

Benutzer
Beiträge
9
Meldung ist:

ERROR 1351: View's SELECT contains a variable or parameter


und ich habe gerade eine Antwort gefunden, dass in Views nicht auf lokale Variablen zugegriffen werden kann.. http://bugs.mysql.com/bug.php?id=26140

Wie kann ich das jetzt umgehen? (Prepared Statements habe ich gefunden, ist das machbar für eine Anfängerin ;) ? )
 

akretschmer

Datenbank-Guru
Beiträge
9.520
Meldung ist:

ERROR 1351: View's SELECT contains a variable or parameter


und ich habe gerade eine Antwort gefunden, dass in Views nicht auf lokale Variablen zugegriffen werden kann.. http://bugs.mysql.com/bug.php?id=26140

Wie kann ich das jetzt umgehen?


Ahhh ja, klar.

Hmm, wie umgehen? Ich würde eine SRF schreiben, Set Returning Function. Aber ich weiß nicht nicht, ob MySQL das kann. Jedenfalls wird es wohl schwer werden, eine VIEW zu definieren, die man zum Zeitpunkt der Definition nicht definieren kann...

Andreas
 

LetziTetzi

Benutzer
Beiträge
9
Habe jetzt mal etwas mit Prepared Statements gemacht..
Es lässt sich die Prozedur zwar fehlerfrei erstellen, was vorher nicht möglich war, aber spätestens bei der Ausführung kommt der selbe Fehler wieder..

Kann man es anders umgehen, dass ich eine Tabelle erstellen lasse, statt einen view? Dann aber mit einer Schleife oder?
 

akretschmer

Datenbank-Guru
Beiträge
9.520
Habe jetzt mal etwas mit Prepared Statements gemacht..
Es lässt sich die Prozedur zwar fehlerfrei erstellen, was vorher nicht möglich war, aber spätestens bei der Ausführung kommt der selbe Fehler wieder..

Kann man es anders umgehen, dass ich eine Tabelle erstellen lasse, statt einen view? Dann aber mit einer Schleife oder?

Was liefern denn einklich Deine beiden SELECTs, wenn Du diese so ausführst?

Kommt da mehr als eine Zeile bei raus?
 

Tommi

Datenbank-Guru
Beiträge
285
Hi,

ich habe mir die Syntax deiner SQL Anweisung einmal angeschaut. Ich bin kein MySQL-User, aber du erstellst hier eine Prozedur, in der du dann eine View erstellst.
Das kann nur zu Problemen und insbesondere zu keinem Abfrageergebnis bei Ausführung kommen.

Lass erst mal das "CREATE VIEW Platzvorschläge AS" in deiner Anweisung weg.
Als nächstes solltest du in der vorhergehenden Abfrage der Kapazität die INTO-Anweisung wie folgt aufbauen:
Code:
SELECT material.kapazität*einlagerungsauftrag.menge INTO gesamtkapa
FROM ...

Dann müßte auch die SELECT-Anweisung korrekt funktionieren

Zum Testen solltest du die Variable "auftragnr" einfach mal lokal deklarieren und hier einen möglichen Wert zuweisen, ohne gleich eine Prozedur-Erstellung/-Änderung durchzuführen


Viele Grüße,
Tommi
 

LetziTetzi

Benutzer
Beiträge
9
Was liefern denn einklich Deine beiden SELECTs, wenn Du diese so ausführst?

Kommt da mehr als eine Zeile bei raus?


Die 1. Abfrage berechnet die Kapazität der Einlagerungsmenge.
Die 2. Abfrage soll alle vorhandenen Plätze ausgeben, deren Kapazität entweder gleich groß oder größer der oben geforderten Kapazität ist.
Dies soll angezeigt werden (ich werde es mal mit in eine Tabelle schreiben versuchen), damit sich der Anwender einen Platz hieraus aussuchen kann.
 

LetziTetzi

Benutzer
Beiträge
9
Hi,

ich habe mir die Syntax deiner SQL Anweisung einmal angeschaut. Ich bin kein MySQL-User, aber du erstellst hier eine Prozedur, in der du dann eine View erstellst.
Das kann nur zu Problemen und insbesondere zu keinem Abfrageergebnis bei Ausführung kommen.

Lass erst mal das "CREATE VIEW Platzvorschläge AS" in deiner Anweisung weg.
Als nächstes solltest du in der vorhergehenden Abfrage der Kapazität die INTO-Anweisung wie folgt aufbauen:
Code:
SELECT material.kapazität*einlagerungsauftrag.menge INTO gesamtkapa
FROM ...

Dann müßte auch die SELECT-Anweisung korrekt funktionieren

Zum Testen solltest du die Variable "auftragnr" einfach mal lokal deklarieren und hier einen möglichen Wert zuweisen, ohne gleich eine Prozedur-Erstellung/-Änderung durchzuführen


Viele Grüße,
Tommi


Danke für die Hinweise, aber getestet habe ich es schon, es funktioniert alles außer das Problem im View mit der lokalen Variable gesamtkapa..


Danke für alle Hilfen! Ich werde versuchen, mir eine Tabelle zu erstellen und die Werte eintragen zu lassen, anders gehts nicht.
 
Werbung:
Oben