ロボット フレームワークを使用して SQL スクリプトを含むストアド プロシージャを実行する
P粉031492081
P粉031492081 2023-08-28 22:08:52
0
1
517
<p>データベースとテーブルの作成とストアド プロシージャの作成を含む SQL スクリプトを実行したいと考えています。 しかし、<strong>SQL スクリプトの実行</strong> キーワードを使用して <strong>データベース ライブラリ</strong> 内の SQL スクリプトを実行しようとすると、次のエラーが発生します: </p> <pre class="brush:php;toolbar:false;">ProgrammingError: (1064, "SQL 構文にエラーがあります。使用する正しい構文については、MariaDB サーバーのバージョンに対応するマニュアルを確認してください。 '区切り文字 $$\n 作成 OR REPLACE PROCEDURE `proc_GetCustomerDetails`(\n I...' at line 2'')</pre> <p>ストアド プロシージャの前に、次の 区切り文字があります: </p> <pre class="brush:php;toolbar:false;">DELIMITER $$ プロシージャの作成または置換 `proc_GetCustomerDetails`( IN CustomerNbr 長文、 IN LANG VARCHAR(5) ) 決定的 始める Lang が NULL の場合は、lang = "fin" を設定します。 終了 IF; SELECT * from dbname.customer; 終了;$$ 区切り文字 ; <p>ストアド プロシージャ部分をコメント アウトすると、SQL ファイルは残りのテーブル作成ステートメントとともにエラーなしで実行されます。 </p> <p>Google で検索しましたが、関連する質問が見つかりませんでした。ストアド プロシージャを呼び出すキーワードがあることがわかります。しかし、テーブルの作成とストアドプロシージャを同じSQLファイルに入れて実行したいと考えています。このタスクには MariaDB を使用しています。 </p> <p>使用するライブラリ</strong>: </p>
    <li>pymysql</li> <li>ロボット フレームワーク データベース ライブラリ</li> </ul> <p>HeidiSQL を使用して SQL ファイルを実行すると、ストアド プロシージャと区切り文字内でエラーが発生せずに実行されます。これは、SQL エラーがないことを意味します。 </p> <p><strong>誰かこれを修正する方法を教えてもらえますか? </strong></p>
P粉031492081
P粉031492081

全員に返信(1)
P粉268284930

DELIMITER はクライアント専用のステートメントであり、サーバーはそれをサポートしていないため、エラーが発生します。解決策 - 削除します。

これは、DELIMITER とは何か、なぜ DELIMITER が必要なのかを説明する、非常に優れた回答を持つ 質問です。

つまり、クライアントを操作するときは、「これはすぐに実行されるステートメントではなく、サーバーに送信するストアド プロシージャ内の単なる行である」ことをクライアントに示す方法が必要です。あなたは(クライアントに)「ステートメント間の DELIMITER は一時的に $$ です」と伝えます。サーバーはこれを必要とせず、気にしません。

CREATE PROCEDURE、BEGIN、END の間のすべてが接続されたステートメント、つまりブロックであることを知っています。

API (pymysql) 経由でデータベースに接続する場合、対話型クライアント (シェル、heidisql など) と比較して、SP をチャンクとして送信し、そのステートメントを 1 つずつ実行する方法がないため、DELIMITERが必要ない場合、サーバーはコマンドをサポートしていないため、エラーが生成されます。消して。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート