• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage numerischer parameter nicht korrekt geschrieben ?

theoretisch

Mitglied
Hallöchen,
ich habe mal wieder eine Frage... diesmal in Bezug auf SQL anywhere.
ich habe eine Prozedur geschrieben die ich nun aufrufen möchte.
Code:
EXECUTE Buchung_erstellen(6 13.45 19 baumeister bob werkstatt)
13.45 ist eine variable des Typs numeic(8,2)... aber sie wird nicht erkannt.
Ich kriege einen Fehler der laut Internet besagt das 13.45 nicht verstanden wird.
Wieso wird der nicht verstanden ?.. wenn ich einfach eine Zeile mit Insert into einfüge geht alles prima.
Erwartet der bei der Übergabe einer var an die Prozedur eine besondere schreib weise?... ich hab in Internet leider nix gefunden.

hoffe einer kann mir weiter helfen =)
vielen dank schonmal
theoretisch
 
Werbung:
hindern tut mich nichts, aber ich dachte meine Beschreibung reicht.
Aber hast schon recht deswegen hier nochmal die Fehlermeldung. =)

Anweisung konnte nicht ausgeführt werden.

Syntaxfehler bei '13.45' in Zeile 1
SQLCODE=-131, ODBC 3-Status="42000"
Zeile 1, Spalte 1

EXECUTE Buchung_erstellen(6 13.45 19 baumeister bob werkstatt)
 
Werbung:
Werbung:
ich habe schon sogut wie alles probiert... zumindest alles was mir eingefallen ist.
6 13.45 19 baumeister bob werkstatt
6, 13.45, 19, baumeister, bob, werkstatt (mit kommas getrennt)
6 13,45 19 baumeister bob werkstatt (dezimal mit komma)
6 13 19 baumeister bob werkstatt ( garkeine dezimal)
@var1 = 6, @var2 = 13.45 .... (die variabeln selber nochmal eigegeben)
immer der selbe fehler.. keine ahnung wieso
 
hmm ne das habe ich noch nicht versucht.
aber das ist eine gute idee, das versuche ich mal, danke.
aber morgen, melde mich dann mal wie es gelaufen ist.
 
Werbung:
nee das geht auch nicht. habe mal
Code:
EXECUTE buchung_entfernen(2,6)
versucht da kam der gleiche Fehler, allerdings bei dem Komma
rufe ich die Prozedur vielleicht falsch auf ?
an der Prozedur selber scheint nichts falsch zu sein.. die lässt sich zumindest ohne weiters speichern... und normalerweise meckert er wenn da was falsch ist.

das ist mal der code zu der 2. prozedur die ich getestet habe
Code:
ALTER PROCEDURE "DBA"."buchung_entfernen"( @flugid int, @kundenid int)
AS
BEGIN
IF (SELECT COUNT(*) FROM FLUGE WHERE FLUGID = @flugid) = 1 /* existiert der flug ?*/
    BEGIN
        if (select getdate()) < (select abflugszeit from fluge where flugid = @flugid)/*ist der flug in der zukunft?*/
            DELETE from BUCHUNGEN WHERE FLUGID = @flugid and KUNDENID = @kundenid
        else
            message 'Der Flug ist schon vorbei, und kann nicht gelöscht werden' to client
    end
ELSE
Message 'Der Flug existiert nicht.' to client
END
 
Du könntest die Prozedur natürlich noch weiter vereinfachen, also ist schon ewig her, dass ich SQL machte, aber da gab es zumindest by ORACLE so eine PseudoTabelle, da konnte man einfach etwas definieren wie Select systime from dummy. Damit könntest was machen wie Select Parameter1+Parameter2 AS sum from dummy. Oder nur 1 Parameter im Aufruf und Select 2*Parameter1 AS das-doppelte from dummy. Dann bist 100% sicher, das es der Aufruf und nicht Inhalt der Prozedur ist.
 
heyy ich hab es.
danke @NetAktiv
Code:
EXECUTE Buchung_erstellen 6, 13.45, 19 ,baumeister, bob, werkstatt
so muss das aussehen... ich frage mich zwar wieso die autovervollständigung dann die klammern da hin setzt wenn garkeine hin dürfen aber gut.

jetzt komme ich in die prozedur rein... jetzt muss ich nur noch irgendwie das aktuelle datum mit einem anderen datum vergleichen...

hätte gedacht das geht so... aber da sagt er mir immer das der flug schon vorbei ist... obwohl das garnicht der fall ist..
aktuelles datum < irgend ein anderes datum
Code:
select getdate()) < (select abflugszeit from fluge where flugid = @flugid)
 
Werbung:
Gibt es eigentlich einen besonderen Grund dafür, die Funktionen in SQL zu erstellen anstatt per AJAX oder PHP und das Ergebnis anschließend in die DB zu schreiben?
 
jaa, wir machen die Aufgaben in einem Datenbankenkurs... da lernen wir nur sql... bzw speziell sql anywhere.
deswegen müssen wir da auch alle in sql schreiben..
 
Werbung:
jaa sql anywhere scheint generell nicht so verbreitet zu sein...
habe auch schon in anderen Foren ein wenig quergelesen... aber da gab es meist nur Eintrage zu mysql oder so.
anywhere war da meist nur 1-2.. wenn überhaupt.
generell wird man im Internet mit mysql zugeschmissen wärend zu anywhere sehr wenig zu finden ist...
ka wieso man gerade so ein programm (sprache) dann macht und nicht welche die verbreiteter sind.
 
wieso man gerade so ein programm (sprache) dann macht und nicht welche die verbreiteter sind.
Man muss wohl zum einen die Historie von SQL und andererseits die von SQL Anywhere betrachten. SQL Anywhere ist eine File basierende Datenbank (wie SQLite oder MS Access), vorwiegend gedacht für kleine Anwendungen auf Clients mit einfacher Architektur. Man braucht nicht wie bei mySql, Oracle, .... extra einen Hintergrundprozess (Listener), um auf die Daten zuzugreifen, das macht der Treiber. SQL Anywhere hat zusätzlich den Vorteil (gegenüber Access) dass es auch unter *X Betriebssystemen verfügbar ist.

Es gibt halt nicht das SQL. Zwar ist SQL in weiten Teilen standardisiert, aber es gibt immer herstellerspezifische Erweiterungen oder Abweichungen. Das einfachste Beispiel ist die Suche mit Wild Charactern, mal muss man *, mal % im LIKE verwenden. Oder wenn man beim SELECT die Zeilen nummerieren will, dann gibt es in Oracle die Pseudospalte ROWNUM, in mySql muss man extra eine Variable einführen und die im SELECT incrementieren. Will man die Ausgabe auf nn Zeilen beschränken, dann ist das bei Oracle WHERE ... ROWNUM <=nn und bei mySql einfach LIMIT nn.

Egal, welches SQL du zum Lernen her nimmst, sobald du eine andere DB in die Finger bekommst, musst du die Unterschiede in den Dialekten berücksichtigen. Aber das ist dann vergleichbar einfach, wenn du die Grundprinzipien 1x verstanden hast.
 
Werbung:
Zurück
Oben