亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

使用機器人框架執(zhí)行包含 SQL 腳本的預(yù)存程序
P粉031492081
P粉031492081 2023-08-28 22:08:52
0
1
643
<p>我想運行包含資料庫和表格創(chuàng)建以及預(yù)存程序創(chuàng)建的sql腳本。 但是當(dāng)我嘗試使用<strong>execute sql script</strong>關(guān)鍵字在<strong>database library</strong>中運行sql腳本時,我會得到以下錯誤:</p> <pre class="brush:php;toolbar:false;">ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right synt to your MariaDB server version for the use synt to 'DELIMITER $$\n CREATE OR REPLACE PROCEDURE `proc_GetCustomerDetails`(\n I...' at line 2")</pre> <p>在預(yù)存程序之前,我有這樣的<strong>delimiter</strong>:</p> <pre class="brush:php;toolbar:false;">DELIMITER $$ CREATE OR REPLACE PROCEDURE `proc_GetCustomerDetails`( IN CustomerNbr LONGTEXT, IN Lang VARCHAR(5) ) DETERMINISTIC BEGIN IF Lang IS NULL THEN SET lang = "fin"; END IF; SELECT * from dbname.customer; END;$$ DELIMITER ;</pre> <p>如果我註解掉預(yù)存程序部分,sql檔將在其餘的表建立語句中運行而不會出錯。 </p> <p>我在Google上搜尋了一下,沒有找到相關(guān)的問題。我看到我們有呼叫預(yù)存程序的關(guān)鍵字。但是我想把表格建立和預(yù)存程序放在同一個sql檔案中並運行。我在這個任務(wù)中使用的是MariaDB。 </p> <p><strong>使用的函式庫</strong>:</p> <ul> <li>pymysql</li> <li>機器人框架資料庫</li> </ul> <p>如果我使用HeidiSQL運行sql文件,它將在預(yù)存程序和分隔符號中運行而不會出現(xiàn)任何錯誤。這意味著沒有sql錯誤。 </p> <p><strong>有人可以告訴我如何解決這個問題嗎? </strong></p>
P粉031492081
P粉031492081

全部回覆(1)
P粉268284930

DELIMITER是僅支援客戶端的語句,伺服器不支援它,因此出現(xiàn)錯誤。解決方案-刪除它。

這裡有一個帶有非常好答案的問題,解釋了DELIMITER是什麼以及為什麼需要。

簡而言之-當(dāng)你與客戶端一起工作時,你需要一種方法來指示它“這不是立即執(zhí)行的語句,這仍然只是你將發(fā)送給伺服器的存儲過程中的一行”-所以你告訴(客戶端)「語句之間的DELIMITER暫時是$$」。伺服器不需要/關(guān)心這個-它知道CREATE PROCEDURE, BEGIN, END之間的所有內(nèi)容都是連接的語句,一個區(qū)塊。

當(dāng)你透過API(pymysql)連接到資料庫時,與互動式客戶端(shell,heidisql等)相比-你將SP作為一個區(qū)塊發(fā)送,沒有辦法逐個運行它的語句,因此DELIMITER是不需要的,伺服器不支援該命令,並且會產(chǎn)生錯誤。刪除它。

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板