Toon posts:

[MySQL5] Stored procedure probleem

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

Verwijderd

Topicstarter
Hey Tweakers!

Sinds kort ben ik met MySQL 5 bezig om stored procedures te maken. Nu heb ik de volgende query maar krijg niet het gewenste resultaat.
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
DELIMITER |
CREATE PROCEDURE rights_select(user_id INT)
    BEGIN
        SET @permission := '';
        SET @type := '';
        SET @id := '';
        SET @entity_id := '';
        SET @tablename := '';
        SET @name := '';
        
        SELECT `permission`.`permission`,
               `type`.`type`,
               `rights`.`user_id`,
               `rights`.`entity_id`
        INTO @permission,
             @type,
             @id,
             @entity_id
        FROM `cms_rights` AS `rights`,
             `cms_permission` AS `permission` ,
             `cms_type` AS `type`
        WHERE `rights`.`user_id` = user_id
        AND `type`.`id` = `rights`.`type_id`
        AND `permission`.`id` = `rights`.`permission_id`;
        
        SELECT `entity_table`.`name`
        INTO @name
        FROM (SELECT @type) AS entity_table;
        
        SELECT @permission, @type, @id, @entity_id, @name;
    END; |


Als ik de laatste query weghaal ( SELECT `entity_table`.`name`
INTO @name
FROM (SELECT @type) AS entity_table;) dan krijg ik dit :


@permission @type @id @entity_id @name
create cms_module11



Zoals je ziet word @type dus wel goed gevult, en wil ik dan daarna SELECT name FROM cms_module doen maar dan krijg ik unkown collumn in field list. Terwijl er echt een kolom name bestaat in de tabel cms_module

Misschien wil ik wel iets wat niet kan :)


Ben heel erg benieuwd wat jullie er van zeggen!!!

[ Voor 12% gewijzigd door Verwijderd op 18-01-2007 10:56 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 00:54
Je wil het veld 'name' uit 'entity_table' selecteren, maar voor zover ik zie, heb je geen 'name' column in die 'entity-table', die in jouw query een alias is voor '@type'.
(Om maar te zeggen dat die query nogal vaag is, en ik ook niet direct inzie wat je met die query wil bereiken).
Ik vermoed dat je wil zeggen: selecteer 'name' uit de tabel met die als naam heeft wat er in de variable type staat ? Het zou me sterk verbazen dat dit zou kunnen maar met mysql weet je nooit

https://fgheysels.github.io/


Verwijderd

Topicstarter
Inderdaad ik wil de kolom naam hebben uit de tabel met die als naam heeft wat er in de variable @type staat.

Maar zoals ik in de tabel heb staan (zonder die laatste query) staat er in @type wel de goede tabelnaam (cms_module)

en in de tabel cms_module staat toch echt een kolom name. Dus misschien wil hij uit een andere tabel de kolom name hebben....

Is er niet een manier om te controleren welke waardes MySQL heeft gegenereerd?

  • maikel
  • Registratie: Januari 2001
  • Laatst online: 12:41
Verwijderd schreef op donderdag 18 januari 2007 @ 11:07:
Inderdaad ik wil de kolom naam hebben uit de tabel met die als naam heeft wat er in de variable @type staat.

Maar zoals ik in de tabel heb staan (zonder die laatste query) staat er in @type wel de goede tabelnaam (cms_module)

en in de tabel cms_module staat toch echt een kolom name. Dus misschien wil hij uit een andere tabel de kolom name hebben....

Is er niet een manier om te controleren welke waardes MySQL heeft gegenereerd?
Kan MySQL een dergelijke query wel aan?
Ik weet dat je in MSSQL niet zomaar een variabele als tabel-naam kunt gebruiken. Je moet dan de query als string opbouwen en die laten uitvoeren door middel van 'sp_executesql'.

Verwijderd

Topicstarter
Ik weet het ook niet zeker of het uberhaupt kan, maar ja op http://dev.mysql.com/doc/refman/5.0/en/user-variables.html staat wel een voorbeeld dat het zou moeten kunnen werken......

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Ik kan het voorbeeld niet vinden. Daarnaast is een DB optwerp dat afhangt van variabele tabelnamen nu ook niet echt de bedoeling.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Het voorbeeld helemaal onderaan de website:


Posted by Miika Heiskanen on November 7 2006 3:54pm [Delete] [Edit]

I'm using this as an alternative to Limit in my stored procs:

SET @rownum = 0;
SET @startRow = 0;
SET @maxRows = 20;

SELECT * FROM (
SELECT @rownum:=@rownum+1 as rownum, t.*
FROM (SELECT @rownum:=0) r, MYTABLE t
) t
WHERE rownum BETWEEN @startRow and @startRow + @maxRows;


Daarnaast is het DB ontwerp echt wel oke, maar op deze manier gewoon erg prettig om een goede resultset te krijgen die ik gelijk in php kan gebruiken. Natuurlijk kan het ook in meerdere queries maar vond deze manier wel leuk om te onderzoeken!
Pagina: 1