Allen,
ik ben aan het proberen om al mijn hard-coded select,insert, .... query's over te zetten naar stored procedures.
Nu blijkt dat wanneer je wil concatenaten dmv pipes ( || ) je een variabele in "sql_mode" moet wijzigen.
Ik zit op een shared hosting omgeving en mijn webhost wil de globale my.ini niet wijzigen.....
Ik heb al gevonden dat je deze ook kan plaatsen dmv van volgende:
Wanneer ik dit in de mysql query browser test en vervolgens:
krijg ik de correcte waarde en kan dus met 'pipes' werken. Open ik daarin tegen terug een nieuw tabblad-sheet ben ik verplicht van eerst terug de sql_mode te setten en pas nadien mijn query uit te voeren...
Ik weet dat het hier over sessie_variabelen gaat, maar nu vraag ik mij het volgende af:
- Wat als je dit gaat 'live' zetten en verscheidene mensen gaan via de asp.net site connectie maken naar de DB. Gaan er dan conflicten optreden wanneer ik in ELKE stored procedure de sql_mode wil gaan setten?
- Moet ik dit slechts 1x doen vermits er eigenlijk met een specifieke user connectie gemaakt wordt? (ipv anonymous)
- Hoe kan ik ervoor zorgen dat dit slechts 1x kan gebeuren?
Voor het laatste had ik gedacht aan een Functie te maken welke controleert op de huidige sql_mode en indien deze verschilt van degene met pipes_as_concat, set dan de sql_mode naar de juiste en return een '1' oid zodat ik hierop kan checken in al mijn SP's.....
Wanneer ik nu een query uitvoer
Dan returnt de functie een '1' (wat wil zeggen dat de sql_mode inderdaad verschilt van degene met pipes_as_concat), maar wanneer ik de select uitvoer krijg ik niet de juiste sql_mode string terug (maar de default waarde).....
Any thoughts?
ik ben aan het proberen om al mijn hard-coded select,insert, .... query's over te zetten naar stored procedures.
Nu blijkt dat wanneer je wil concatenaten dmv pipes ( || ) je een variabele in "sql_mode" moet wijzigen.
Ik zit op een shared hosting omgeving en mijn webhost wil de globale my.ini niet wijzigen.....
Ik heb al gevonden dat je deze ook kan plaatsen dmv van volgende:
code:
1
| SET Sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT'; |
Wanneer ik dit in de mysql query browser test en vervolgens:
code:
1
| SELECT @@sql_mode; |
krijg ik de correcte waarde en kan dus met 'pipes' werken. Open ik daarin tegen terug een nieuw tabblad-sheet ben ik verplicht van eerst terug de sql_mode te setten en pas nadien mijn query uit te voeren...
Ik weet dat het hier over sessie_variabelen gaat, maar nu vraag ik mij het volgende af:
- Wat als je dit gaat 'live' zetten en verscheidene mensen gaan via de asp.net site connectie maken naar de DB. Gaan er dan conflicten optreden wanneer ik in ELKE stored procedure de sql_mode wil gaan setten?
- Moet ik dit slechts 1x doen vermits er eigenlijk met een specifieke user connectie gemaakt wordt? (ipv anonymous)
- Hoe kan ik ervoor zorgen dat dit slechts 1x kan gebeuren?
Voor het laatste had ik gedacht aan een Functie te maken welke controleert op de huidige sql_mode en indien deze verschilt van degene met pipes_as_concat, set dan de sql_mode naar de juiste en return een '1' oid zodat ik hierop kan checken in al mijn SP's.....
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| DELIMITER $$ DROP FUNCTION IF EXISTS `testen`.`F_SQL_MODE` $$ CREATE FUNCTION `testen`.`F_SQL_MODE` () RETURNS tinyint(1) BEGIN DECLARE Status tinyint(1); SET Status = 0; IF (SELECT @@sql_mode <> 'PIPES_AS_CONCAT,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION') THEN SET sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT'; SET Status = 1; END IF; return Status; END $$ DELIMITER ; |
Wanneer ik nu een query uitvoer
code:
1
2
| select F_SQL_MODE(); SELECT @@sql_mode; |
Dan returnt de functie een '1' (wat wil zeggen dat de sql_mode inderdaad verschilt van degene met pipes_as_concat), maar wanneer ik de select uitvoer krijg ik niet de juiste sql_mode string terug (maar de default waarde).....
Any thoughts?
Last night I lay in bed looking up at the stars in the sky and I thought to myself, where the heck is the ceiling.