[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: 45 strings in 45 mysql databases



On 19/12/14 22:37, Frans van Berckel wrote:
> On Fri, 2014-12-19 at 22:16 +0100, Matijs van Zuijlen wrote:
>> Ik heb wat betreft het schakelen tussen databases geen ervaring met MySQL, maar
>> wel (al lang geleden) met SQL Server, en daar kon je het alleen doen door gewoon
>> in de procedure een hele grote string te maken waarin dus USE '...' staat en die
>> in een keer weer uit te laten voeren. Je kon dus geen parameter aan USE doorgeven.
>>
>> Concreet zie ik in de SQL hieronder in de producere-definitie staan:
>>
>> USE `databasename`;
>>
>> Volgens mij betekent dit gewoon dat je probeert de database met de naam
>> 'databasename' te gebruiken. Intuïtief zou je dan zeggen dat je het volgende
>> moet doen:
>>
>> USE databasename;
>>
>> ... maar de ervaring met SQL Server leert dat dit best wel eens niet zou kunnen
>> werken.
> 
> In de database namen zit soms een dash, vandaar het gebruik van `. Moet
> ik deze `jes dan naar het call commando verplaatsen?

Ja, want anders gebruikt USE letterlijk de naam databasename, en er is vast geen
database die databasename heet. Maar grote kans dus dat USE helemaal geen
variabele als parameter accepteert:

    mysql> SET @s = 'foo';
    Query OK, 0 rows affected (0.00 sec)

    mysql> USE @s
    ERROR 1049 (42000): Unknown database '@s'

> En wat is eventueel een goed alternatief, voor procedure in deze?

Ik dacht dat je de string-methode kon gebruiken. Ik vond hier een uitleg hoe dat
in MySQL moet:

http://forums.mysql.com/read.php?60,27979,30437

Maar ik heb dit even uitgeprobeerd, en het lijkt erop dat MySQL 'USE' niet
ondersteunt als prepared statement. Dus misschien kan het wel helemaal niet in
puur (My)SQL.

De oplossing van Geert lijkt me een hele goeie.

Groet,

-- 
Matijs

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: