Avatar billede jvase Nybegynder
27. april 2016 - 07:33 Der er 6 kommentarer og
1 løsning

Trigger - anvende dynamisk tabelnavn i INSERT statement

Jeg har forgæves forsøgt at finde en måde til at oprette en trigger, hvor tabelnavnet afhænger af værdien af et felt i den netop indsatte post.

Det er tale om en AFTER INSERT trigger:

INSERT INTO tabel_? VALUES(new.felt2,-1,new.felt3);

hvor spørgsmålstegnet skal erstattes af værdien af new.felt1.

Er indholdet af new.felt1 = 2, skal der altså eksekveres følgende SQL i den nævnte trigger, når der indsættes en post:

INSERT INTO tabel_2 VALUES(new.felt2,-1,new.felt3);

og det forsøger jeg ved at gøre sådan:

INSERT INTO concat('tabel_',new.felt1) VALUES(new.felt2,-1,new.felt3)

Men det giver en fejl ved oprettelsen, og da værdien af 'felt1' kan være 1-50, vil det være alt for kompliceret at lave 50 if-sætninger..

Er der nogen, der kan hjælpe??
Avatar billede arne_v Ekspert
28. april 2016 - 01:57 #1
Du bliver noedt til at lave hele din SQL som en VARCHAR og saa PREPARE og EXECUTE den.
Avatar billede jvase Nybegynder
28. april 2016 - 06:49 #2
Taj for svar! Se dette link:

http://stackoverflow.com/questions/11514713/alternative-to-using-prepared-statement-in-trigger-with-mysql:

hvor der nederst står følgende:

"SQL prepared statements (PREPARE, EXECUTE, DEALLOCATE PREPARE) can be used in stored procedures, but not stored functions or triggers. Thus, stored functions and triggers cannot use dynamic SQL (where you construct statements as strings and then execute them)."

Har forsøgt at finde kodeeksempler til, hvordan jeg kan oprette en trigger, men forgæves, og har ikke megen lyst til at søge efter det, når jeg ser ovennævnte ;-)

Har du et konkret simpelt eksempel på, hvordan det kan gøres?
Avatar billede arne_v Ekspert
28. april 2016 - 14:38 #3
Ups. Det er et problem.

Trigger kalder SP som laver dynamisk SQL maaske??
Avatar billede jvase Nybegynder
01. maj 2016 - 14:17 #4
Jeg har valgt at lave de 50 tabeller om til én, og lade felt1 indgå som det ekstra felt i den nye tabel, hvorfor den nævnte trigger kun behøver at henvise til én og samme tabel. Det fungerer fint, og hvorfor have 50 tabeller, når man kan nøjes med én? ;-)
Avatar billede arne_v Ekspert
01. maj 2016 - 15:04 #5
Det lyder som en rigtig god aendring.

:-)
Avatar billede jvase Nybegynder
03. maj 2016 - 10:50 #6
Svar
Avatar billede jvase Nybegynder
03. maj 2016 - 10:51 #7
Fandt selv en anden løsning
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester