it-swarm.com.de

Fehler erhalten: [Err] 1615 - Die vorbereitete Anweisung muss mit MySQL 5.6.30 neu vorbereitet werden

Problem/Problem: Fehler: [Err] 1615 - Prepared statement needs to be re-prepared

Ich habe eine gespeicherte Prozedur, die eine vorbereitete Anweisung und eine Ansicht enthält

DROP PROCEDURE IF EXISTS `sampleProc`;

DELIMITER ;;
CREATE DEFINER = `root`@`localhost` PROCEDURE `sampleProc`()
BEGIN

SET @select = "SELECT * FROM `viewSample` ";

  PREPARE stmt FROM @select ;
  EXECUTE stmt ;
  DEALLOCATE PREPARE stmt ;

END  ;;
DELIMITER ;

Der folgende Aufruf gibt manchmal den Fehler CALL sampleProc();

Mögliche Umgehung/Lösungen

Es scheint, dass die beste Lösung darin besteht, den Wert von table_definition_cache zu erhöhen, aber es scheint, dass es nicht funktioniert, da es bereits von 1400 (Standard) auf 16384 erhöht wurde. Table_open_cache wurde ebenfalls auf 32162 erhöht

Variable_name               Value
table_definition_cache      16384
table_open_cache            32162
table_open_cache_instances  4
7
Abdul Manaf

Dies scheint ein fortlaufendes Problem zu sein

Ansichten sind mit Dynamic SQL unübersichtlich

Der früheste Fehler war In vorbereiteten Anweisungen von vor 11 Jahren können keine ANSICHTEN erstellt werden. Es wurde ein Patch eingefügt, um ihn zu beheben. .

Ein anderer Fehlerbericht, Prepared-Statement schlägt fehl, wenn MySQL-Server geladen ist , besagt, dass Fehler 1615 kein Fehler ist, wenn die zugrunde liegenden Tabellen ausgelastet sind. (Ja wirklich ?)

Das Erhöhen der Größe des Tabellencaches ist zwar sinnvoll (siehe MySQL-Fehler beim Arbeiten mit einer MySQL-Ansicht ), funktioniert jedoch nicht immer (siehe Allgemeiner Fehler: 1615 Vorbereitete Anweisung muss vorhanden sein) neu vorbereitet (Auswahl der MySQL-Ansicht )

ALTERNATIVEN

Vor über einem Jahr erwähnte dies jemand im MySQL-Forum (MySQL-Ansicht, vorbereitete Anweisung und vorbereitete Anweisung müssen neu vorbereitet werden) .

Jemand kam auf die einfache Idee, die Ansicht in der vorbereiteten Anweisung nicht zu verwenden, sondern stattdessen die SQL der Ansicht in einer Unterabfrage zu verwenden . Eine andere Idee wäre, das von der Ansicht verwendete SQL zu erstellen und es in Ihrem Client-Code auszuführen .

Dies scheinen bessere Problemumgehungen zu sein, die nur die Größe des Tabellencaches erhöhen.

6
RolandoMySQLDBA