MySQL - Create Function "func_prijsonder(limiet FLOAT)"

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Anoniem: 494866

Topicstarter
Beste mensen,

Ik probeer een opdracht te maken voor MySQL, alleen zit ik met een probleem.

Het gaat om "een nieuwe functie die het aantal titels heeft met een prijs onder de opgegeven limiet".

In MySQL moet ingevoerd worden: CREATE FUNCTION func_prijsonder(limiet FLOAT)
Dit heb ik ingevoerd en vervolgens dit:

CREATE FUNCTION func_prijsonder (limiet DECIMAL(11,2))
RETURNS INT(11)
READS SQL DATA
BEGIN
DECLARE aantal INT(11);
SELECT
COUNT(*) INTO aantal
FROM
boeken
WHERE
prijs < limiet;
RETURN aantal;
END
//

Vervolgens ben ik hier gaan kijken: http://dev.mysql.com/doc/refman/5.0/en/create-function.html
Voor MySQL Tips, maar kom er echt niet meer verder.. :(

Ik waardeer jullie hulp enorm mensen!

Groetjes & fijne weekend alvast,

Beren90

Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Wat is er dan mis? Hoe roep je de functie aan? Wat gebeurt er als je de functie gebruikt? Krijg je foutmeldingen (welke dan)? Etc, etc, etc.

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

Anoniem: 494866

Topicstarter
Beste Herko,

Ik krijg in foutmelding in MySQL:

Dit krijg ik: #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

En ik MySQL voer ik alleen dit: CREATE FUNCTION func_prijsonder (limiet FLOAT)

Acties:
  • 0 Henk 'm!

  • CH4OS
  • Registratie: April 2002
  • Niet online

CH4OS

It's a kind of magic

Hoe gaat MySQL om met typecasting? Je gooit een float er in en gooit een int(eger) (en dus een afgerond getal) als resultaat terug.

Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Hoe moet de functie er nu uitzien?
CREATE FUNCTION func_prijsonder(limiet FLOAT)
of
CREATE FUNCTION func_prijsonder (limiet DECIMAL(11,2))
?
Want je zegt nu beide te doen achter elkaar. Dat is geen valide syntax.

Op de pagina die je linkt (nou ja, 1 link verder: http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html) staan een aantal voorbeelden.
CptChaos schreef op zaterdag 12 januari 2013 @ 19:36:
Hoe gaat MySQL om met typecasting? Je gooit een float er in en gooit een int(eger) (en dus een afgerond getal) als resultaat terug.
Waarom zou dat een probleem zijn? Wat erin gaat is een parameter van de functie, wat er terugkomt is iets heel anders. Heel normaal bij functies, in welke taal dan ook.

[ Voor 61% gewijzigd door Herko_ter_Horst op 12-01-2013 19:39 ]

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

Anoniem: 494866

Topicstarter
Het moet om de eerste gaan:

Deze: CREATE FUNCTION func_prijsonder(limiet FLOAT)
Het hoeft niet exact 100% dit te zijn, mag ook eventueel iets anders erin.

[ Voor 31% gewijzigd door Anoniem: 494866 op 12-01-2013 19:50 ]


Acties:
  • 0 Henk 'm!

  • Herko_ter_Horst
  • Registratie: November 2002
  • Niet online
Ok, doe dat dan eens met de rest van de functie-definitie die je eronder hebt staan (dus zonder die andere CREATE FUNCTION).

En heb je de DELIMITER veranderd? Dat staat namelijk wel in het voorbeeld waar ik naar link, maar niet in jouw tekst.

En verder gaan we geen handje-vasthouden. Even eigen inzet, dus terugmelden wat je met de feedback gedaan hebt.

"Any sufficiently advanced technology is indistinguishable from magic."


Acties:
  • 0 Henk 'm!

Anoniem: 280479

Ik heb je eigen code gequote uit je eerste post deze werkt zoals verwacht MITS je de delimiter goed zet.
Zonder de delimiter probeert mysql alles uit te voeren tot de huidige delimeter ';' is bereikt. Deze staat nu achter de 'DECLARE aantal INT(11)' vanaf het begin van de code t/m de eerste ';' wordt dan als 1 command gezien. Deze regel is dan niet syntactisch juist en daarom krijg je de foutmelding dat je syntax niet klopt.

Door de delimiter aan te passen ziet hij de ';' niet meer als commando einde. In deze code heb je al wel een delimiter gebruikt: '//' na END. Echter de delimiter heb je daar nog niet op gezet.

Vergeet na het aanmaken van de function de delimiter niet weer terug te zetten naar ';' dit scheelt je later vragen.
Anoniem: 494866 schreef op zaterdag 12 januari 2013 @ 19:00:
...
MySQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE FUNCTION func_prijsonder (limiet DECIMAL(11,2))
    RETURNS INT(11)
    READS SQL DATA
BEGIN
    DECLARE aantal INT(11);
    SELECT
        COUNT(*) INTO aantal
    FROM
        boeken
    WHERE
        prijs < limiet;
    RETURN aantal;
END
//

...
Pagina: 1