Führen Sie gespeicherte Prozeduren mit SQL-Skripts mit Robot Framework aus
P粉031492081
2023-08-28 22:08:52
<p>Ich möchte ein SQL-Skript ausführen, das die Erstellung von Datenbanken und Tabellen sowie die Erstellung gespeicherter Prozeduren umfasst.
Aber wenn ich versuche, das SQL-Skript in der <strong>Datenbankbibliothek</strong> mit dem Schlüsselwort <strong>execute sql script</strong> auszuführen, erhalte ich die folgende Fehlermeldung: </p>
<pre class="brush:php;toolbar:false;">ProgrammingError: (1064, "Sie haben einen Fehler in Ihrer SQL-Syntax; überprüfen Sie das Handbuch, das Ihrer MariaDB-Serverversion entspricht, um die richtige Syntax für die Verwendung in der Nähe zu finden 'DELIMITER $$n CREATE OR
ERSETZEN SIE PROCEDURE `proc_GetCustomerDetails`(n I...' in Zeile 2")</pre>
<p>Vor der gespeicherten Prozedur habe ich dieses <strong>Trennzeichen</strong>: </p>
<pre class="brush:php;toolbar:false;">DELIMITER $$
PROZEDUR „proc_GetCustomerDetails“ ERSTELLEN ODER ERSETZEN (
IN KundenNr LANGTEXT,
IN LANG VARCHAR(5)
)
DETERMINISTISCH
BEGINNEN
WENN Lang NULL IST, DANN SETZE lang = "fin";
ENDE WENN;
SELECT * from dbname.customer;
ENDE;$$
DELIMITER ;</pre>
<p>Wenn ich den Teil der gespeicherten Prozedur auskommentiere, wird die SQL-Datei zusammen mit den restlichen Tabellenerstellungsanweisungen fehlerfrei ausgeführt. </p>
<p>Ich habe bei Google gesucht und keine entsprechenden Fragen gefunden. Ich sehe, wir haben Schlüsselwörter, die gespeicherte Prozeduren aufrufen. Aber ich möchte die Tabellenerstellung und die gespeicherte Prozedur in derselben SQL-Datei ablegen und ausführen. Ich verwende MariaDB für diese Aufgabe. </p>
<p><strong>Verwendete Bibliotheken</strong>: </p>
<ul>
<li>pymysql</li>
<li>Robot Framework-Datenbankbibliothek</li>
</ul>
<p>Wenn ich die SQL-Datei mit HeidiSQL ausführe, läuft sie innerhalb der gespeicherten Prozedur und des Trennzeichens ohne Fehler. Dies bedeutet, dass keine SQL-Fehler vorliegen. </p>
<p><strong>Kann mir jemand sagen, wie ich das beheben kann? </strong></p>
DELIMITER是仅支持客户端的语句,服务器不支持它,因此出现错误。解决方案-删除它。
这里有一个带有非常好答案的问题,解释了DELIMITER是什么以及为什么需要。
简而言之-当你与客户端一起工作时,你需要一种方法来指示它“这不是立即执行的语句,这仍然只是你将发送给服务器的存储过程中的一行”-所以你告诉(客户端)“语句之间的DELIMITER暂时是$$”。服务器不需要/关心这个-它知道
CREATE PROCEDURE, BEGIN, END
之间的所有内容都是连接的语句,一个块。当你通过API(pymysql)连接到数据库时,与交互式客户端(shell,heidisql等)相比-你将SP作为一个块发送,没有办法逐个运行它的语句,因此DELIMITER是不需要的,服务器不支持该命令,并且会生成错误。删除它。