Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zapytanie: dodanie do bazy rekordu i automatyczne tworzenie odpowiedniej tabeli
infrat
post 24.06.2012, 10:52:33
Post #1





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.03.2008

Ostrzeżenie: (0%)
-----


Witam.

Potrzebuję sugestii co do sposobu przygotowania bazy w ten sposób, by po dodaniu do odpowiedniej tabeli nowego rekordu, automatycznie tworzyła się w bazie nowa tabela, której nazwą byłaby wartość jednego z pól wcześniej dodanego rekordu.

Jakiś pomysł? Czy istnieje w ogóle możliwość stworzenia takiego powiązania, czy pozostaje jedynie przesłanie oddzielnie INSERT'a i CREATE TABLE?
Myślałem o triggerach, ale one podobno nie umożliwiają tworzenia nowych tabel.

Pozdrawiam.
Go to the top of the page
+Quote Post
trafas
post 24.06.2012, 11:04:58
Post #2





Grupa: Zarejestrowani
Postów: 87
Pomógł: 12
Dołączył: 31.05.2006

Ostrzeżenie: (0%)
-----


możesz skorzystać z triggera, a w nim odapalać wcześniej przez ciebie odpowiednio spreparowane zapytanie za pomocą funkcji execute

Przykład:

  1.  
  2. declare @zapytanie varchar(255)
  3.  
  4. SET @zapytanie = 'create table .....'
  5.  
  6. execute(@zapytanie)
  7.  


Ten post edytował trafas 24.06.2012, 11:05:52
Go to the top of the page
+Quote Post
infrat
post 24.06.2012, 12:31:29
Post #3





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.03.2008

Ostrzeżenie: (0%)
-----


Cytat(trafas @ 24.06.2012, 11:04:58 ) *
możesz skorzystać z triggera, a w nim odapalać wcześniej przez ciebie odpowiednio spreparowane zapytanie za pomocą funkcji execute

Przykład:

  1.  
  2. declare @zapytanie varchar(255)
  3.  
  4. SET @zapytanie = 'create table .....'
  5.  
  6. execute(@zapytanie)
  7.  


Twoja propozycja jest zgodna z MySQL? Bo z tego co manual mówi to MySQL używa nieco innej składni dla execute (mnie w każdym razie się wysypuje błąd składni przy próbie zaimplementowania Twojego rozwiązania). Vide -> http://dev.mysql.com/doc/refman/5.0/en/sql...statements.html

Ale nawet idąc tym tropem, po przerobieniu tego na składnię zgodną z MySQL, dostaję błąd: "ERROR 1336 (0A000): Dynamic SQL is not allowed in stored function or trigger"

Mój kod w tym przypadku wygląda tak:

  1. delimiter |
  2.  
  3. CREATE TRIGGER test BEFORE INSERT ON users
  4. FOR EACH ROW BEGIN
  5. SET @TABLE = 'tabela';
  6. SET @q = CONCAT('create table ',@TABLE);
  7. prepare stmt1 FROM @q;
  8. execute stmt1;
  9. END;
  10. |
Go to the top of the page
+Quote Post
Niktoś
post 24.06.2012, 13:01:27
Post #4





Grupa: Zarejestrowani
Postów: 1 195
Pomógł: 109
Dołączył: 3.11.2011

Ostrzeżenie: (10%)
X----


Cytat
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).

Dziwne ,kolega wyżej pisał pewnie w MSSQL , bo tam w trigerach można używać dynamicznego języka SQL w MySql jak jest napisane to nie można.

Ten post edytował Niktoś 24.06.2012, 13:02:07
Go to the top of the page
+Quote Post
infrat
post 24.06.2012, 13:39:32
Post #5





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 2.03.2008

Ostrzeżenie: (0%)
-----


Dzięki za odpowiedź.

Wychodzi na to, że nie pozostaje mi nic innego jak przeprojektowanie bazy i zrobienie relacji "jak Pan Bóg przykazał".
No chyba, że ktoś ma jakiś inny pomysł?

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 19:33