Jak budować i używać dynamicznego sql w przechowywanej procedurze MySQL?Jak mieć dynamiczny SQL w przechowywanej procedurze MySQL
53
A
Odpowiedz
42
Nie wierzę, że MySQL obsługuje dynamiczny sql. Możesz wykonywać "przygotowane" instrukcje, które są podobne, ale różne.
Oto przykład:
mysql> PREPARE stmt FROM
-> 'select count(*)
-> from information_schema.schemata
-> where schema_name = ? or schema_name = ?'
;
Query OK, 0 rows affected (0.00 sec)
Statement prepared
mysql> EXECUTE stmt
-> USING @schema1,@schema2
+----------+
| count(*) |
+----------+
| 2 |
+----------+
1 row in set (0.00 sec)
mysql> DEALLOCATE PREPARE stmt;
Sporządzone sprawozdania są często używane, aby zobaczyć plan wykonania dla danego zapytania. Ponieważ są one wykonywane za pomocą komendy execute i można przypisać ją do zmiennej, można w przybliżeniu przypisać to samo zachowanie, co dynamiczny sql.
Oto dobry link o tym:
Nie zapomnij deallocate stmt
stosując ostatnią linię!
Powodzenia!
91
Po 5.0.13, procedur przechowywanych, można użyć dynamicznego SQL:
delimiter //
CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64))
BEGIN
SET @s = CONCAT('SELECT ',col,' FROM ',tbl);
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
//
delimiter ;
Dynamiczny SQL nie działa w funkcji lub wyzwala. Aby uzyskać więcej informacji, patrz the MySQL documentation.
2
Można przejść thru poza dynamicznej instrukcji za pomocą zdefiniowanych przez użytkownika zmienne
Server version: 5.6.25-log MySQL Community Server (GPL)
mysql> PREPARE stmt FROM 'select "AAAA" into @a';
Query OK, 0 rows affected (0.01 sec)
Statement prepared
mysql> EXECUTE stmt;
Query OK, 1 row affected (0.01 sec)
DEALLOCATE prepare stmt;
Query OK, 0 rows affected (0.01 sec)
mysql> select @a;
+------+
| @a |
+------+
|AAAA |
+------+
1 row in set (0.01 sec)
Powiązane problemy
- 1. MySQL: IF w procedurze przechowywanej
- 2. Jak podzielić tekst oddzielony przecinkami w przechowywanej w MySQL procedurze
- 3. Nazwa tabeli przechodzącej w procedurze przechowywanej sql
- 4. Serwer SQL: zmienna opcjonalna w procedurze przechowywanej
- 5. Tłumienie transakcji w procedurze przechowywanej
- 6. SQL: w klauzuli w procedurze przechowywanej: jak przekazywać wartości
- 7. Jak możemy wykorzystać mysql_affected_rows() w procedurze przechowywanej
- 8. Jak wywołać funkcję skalarną w procedurze przechowywanej?
- 9. Wykonaj procedurę przechowywaną w innej procedurze przechowywanej na serwerze SQL
- 10. MySQL: Wybór wielu pól na wiele zmiennych w procedurze przechowywanej
- 11. Przekazywanie nazwy pola jako parametru w przechowywanej procedurze MySQL
- 12. Domyślne wartości parametrów w przechowywanej procedurze SQL Server 2008
- 13. Oświadczenia po END w procedurze przechowywanej
- 14. Zmienna liczba argumentów w procedurze przechowywanej PL/SQL
- 15. Zliczanie liczby usuniętych wierszy w procedurze przechowywanej programu SQL Server
- 16. Jak zwrócić liczbę uszkodzonych wierszy w procedurze przechowywanej HANA?
- 17. Jak rzucić błąd w procedurze MySql?
- 18. Wybieranie i aktualizowanie w jednej przechowywanej procedurze
- 19. Jak wstawić do dwóch tabel naraz w procedurze przechowywanej?
- 20. Jak używać DROP TABLE IF EXISTS w przechowywanej w MySQL procedurze
- 21. Jak utworzyć i użyć tabeli tymczasowej w przechowywanej procedurze Oracle?
- 22. Bufor znaków za mały błąd w procedurze przechowywanej Oracle
- 23. Zapytanie działa szybko, ale działa wolno w procedurze przechowywanej.
- 24. Podstawowy klucz złożony w tabeli Zmienna w przechowywanej procedurze
- 25. Jak nadać wykonanie określonej określonej procedurze przechowywanej do użytkownika
- 26. chcę przekazać kwerendę wybierającą w procedurze przechowywanej jako argumnet
- 27. Instrukcja IF w klauzuli ORDER Klauzula instrukcji SELECT w procedurze przechowywanej serwera SQL
- 28. Sprawdź, czy parametr jest pusty lub pusta w procedurze przechowywanej.
- 29. DESC i ASC jako parametr w procedurze przechowywanej
- 30. nazwa tabel i widoków w procedurze przechowywanej w serwerze sql 2005
to nie działa, gdy '?' Jest w miejscu nazwy tabeli –
starasz to za pośrednictwem konsola mysql? lub używając innej metody, jeśli używasz tego w kodzie, Twój dostawca musiałby go wspierać. –
Najwyraźniej uczą się [WYKONUJ NATYCHMIAST] (http://dev.mysql.com/worklog/task/?id=2793) dla przyszłych wersji. –