[MySQL] stored function of procedure

Pagina: 1
Acties:
  • 106 views sinds 30-01-2008
  • Reageer

  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Ik heb een klein probleempje met de ontwikkeling van procedures / functions, ook omdat ik nog niet weet wat, wat doet.

Wat ik wil is,ik noem het maar even een function, waardoor ik kan zoeken in een door mij aangegeven table van een database

SQL:
1
2
3
4
5
6
CREATE FUNCTION test.bloem(IN tblnaam varchar(100),IN naam varchar(100),OUT BloemID INT(10))
RETURNS INT
LANGUAGE SQL DETERMINISTIC SQL SECURITY DEFINER
BEGIN
SELECT test.BloemId from tblnaam  where BloemNaam like '%naam%';
END


Nu kun je gelijk zien dat ik er nog niks van snap maar kan niet echt documentatie vinden die ik lekker door kan lezen en begrijpelijk is.
Wat ik ook nog niet weet is wanneer je een function of procedure gebruik.

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
In de meeste talen is een functie een procedure die een waarde teruggeeft.
Een procedure doet gewoon iets.

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik weet niet 100% zeker hoe MySQL hiermee omgaat, maar in principe zijn variabelen voor objectnamen (tabellen, kolommen) niet toegestaan. De enige manier om dit te doen in een string naar je database sturen en daar een EXECUTE op te doen, of de goede query clientside op te bouwen. In dit geval zou ik daar voor kiezen.

Oops! Google Chrome could not find www.rijks%20museum.nl


  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Begin eens hier
En probeer van daaruit stap voor stap verder te komen. :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

Je hebt meerdere tabellen met dezelfde velden? Dat klinkt als een redelijk brak datamodel. :o

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Het probleem is dat tblnaam bv bloem1 tm 200 kan zijn om een snelle zoek resultaat te genereren.
Elke table bevat een range die vanuit een andere waarde bepaalt kan worden en nu wou ik die range meegeven aan de function/procedure.
Dit wordt dan dus bloem+$rangeid.

Deze splitsing is gedaan vanwege een bepaalde opzet van onze server park en het aantal records die bloem anders zou bevatten.
Ongeveer 5,5 miljoen records en dit zoekt nogal lang.

[ Voor 66% gewijzigd door ingmdijkstra op 11-04-2006 13:44 ]


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 22-01 23:51

NMe

Quia Ego Sic Dico.

:X

Zoek asjeblieft even op wat databasenormalisatie is en pas dat toe op je database, daar doe je jezelf een heel groot plezier mee.

@Edit: indexen. 5,5 miljoen is veel maar echt niet extreem veel.

[ Voor 20% gewijzigd door NMe op 11-04-2006 13:41 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • GX
  • Registratie: Augustus 2000
  • Laatst online: 14-05-2025

GX

Nee.

ingmdijkstra schreef op dinsdag 11 april 2006 @ 13:38:
Ongeveer 5,5 miljoen records en dit zoekt nogal lang.
Leer dan liever wat een index is dan hoe je een procedure moet maken; 5,5 miljoen records is echt niet wereldschokkend. Ook voor MySQL niet.

  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Het probleem omvat meer dan natuurlijk deze 5,5 milj records. Ook hebben we een HA server nodig die vanwege de groote van data niet door clustering zomaar opgelost kan worden.
Onze data stijgt al gauw over de 4 Gig heen en groeit elke dag.

Maar mijn vraag blijft natuurlijk, wanneer moet je een function gebruiken en wanneer een procedure en wat is het verschil in aanroep. En kent iemand nog een duidelijke handleiding voor dit gebruik.

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
ingmdijkstra schreef op dinsdag 11 april 2006 @ 13:48:
Maar mijn vraag blijft natuurlijk, wanneer moet je een function gebruiken en wanneer een procedure en wat is het verschil in aanroep. En kent iemand nog een duidelijke handleiding voor dit gebruik.
Vooral niet mijn eerdere link aanklikken ;)

Ik heb één stapje voor je verder geklikt:
MySQL REference Manual Hoofdstuk 12: Functions
Volgens mij heeft mySQL geen procedures. Maar verschilt het per DBMS. :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Het gaat hier om stored procedures waardoor je daarna deze kunt aanroepen.
SQL:
1
select bloem(bloem1,'afrikaantje')

[ Voor 16% gewijzigd door ingmdijkstra op 11-04-2006 14:24 ]


  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
ingmdijkstra schreef op dinsdag 11 april 2006 @ 14:23:
Het gaat hier om stored procedures waardoor je daarna deze kunt aanroepen.
SQL:
1
select bloem(bloem1,'afrikaantje')
'vrouwelijk geslachtsdeel'!! verkeerde link :+

Ik weet wat je bedoelt :)

MySQL Reference Manual: Adding new functions to mysql :)

[ Voor 21% gewijzigd door Gonadan op 11-04-2006 14:28 ]

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Zoek nu alleen wanneer je de procedure gebruikt of een functie en hoe dit werkt.
Merk zelf dat de handleiding van mysql zelf voor mij een beetje tekort schiet aan uitleg.

  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
ingmdijkstra schreef op dinsdag 11 april 2006 @ 15:24:
Zoek nu alleen wanneer je de procedure gebruikt of een functie en hoe dit werkt.
Merk zelf dat de handleiding van mysql zelf voor mij een beetje tekort schiet aan uitleg.
Dat heb ik in de 2e post al uitgelegd.
Een functie gebruik je als je een waarde wilt terug krijgen.
Een procedure gebruik je als je een bepaalde handeling vaker wilt gebruiken maar deze geeft geen waarde/resultaat terug.

Zie hier meer daarover

In jouw geval moet je dus een functie gebruiken :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • Gonadan
  • Registratie: Februari 2004
  • Nu online

Gonadan

Admin Beeld & Geluid, Harde Waren
Als ik het zo bekijk kan je dit misschien proberen.
Ik garandeer niet dat de syntax helemaal goed is ;)

SQL:
1
2
CREATE FUNCTION test.bloem(tblnaam CHAR(100), naam CHAR(100)) RETURNS INT(10)
RETURN SELECT BloemId FROM tblnaam WHERE BloemNaam LIKE '%naam%';


En dan

SQL:
1
SELECT test.bloem('bloemen', 'anjer');

Probeer eens. :)

Look for the signal in your life, not the noise.

Canon R6 | RF 24-70 f/2.8 L | 50 f/1.8 STM | 430EX II
Sigma 85 f/1.4 Art | 100-400 Contemporary
Zeiss Distagon 21 f/2.8


  • ingmdijkstra
  • Registratie: November 2005
  • Laatst online: 14-09-2023
Heel raar maar krijg het niet aan de praat vooral vanuit phpmyadmin.
Nu vanuit een tooltje en dan kan hij mysql.proc niet vinden.
Had zel even toevallig een syntax correcte procedure gemaakt

Nu uitvinden waarom hij nu naar proc wil terwijl dat deze eigenlijk in de db information_schema.procedure moet komen te staan snap ik even niet.
Kan het ook fout hebben want in mysql staat natuurlijk wel de table func.


Klein probleempje, kom er achter dat mysql 5.0 procedures er uit zijn gegooit.
Zal nog wel zoeken of het wel mogelijk is om dit weer te activeren.

[ Voor 17% gewijzigd door ingmdijkstra op 14-04-2006 16:36 ]

Pagina: 1