検索

ホームページ  >  に質問  >  本文

mysql プロシージャはステータスを unix スクリプトにのみ返す必要があります

デバッグ用の out パラメーターといくつかの print ステートメントを備えた mysql プログラムがあります。 このプロシージャを Unix シェル スクリプトから呼び出しています。そのアイデアは、後で条件をチェックするために使用する unix 変数に out パラメータを割り当てることです。ただし、変数には print ステートメントも割り当てられます。 print ステートメントを削除し、出力パラメータ (整数) を変数に代入したいと考えています。

Unix スクリプト:

リーリー

print ステートメントも提供します

リーリー

DBeaver などの SQL クライアントでコードを実行すると、出力パラメーターのみが取得されます。

リーリー リーリー

print/debug ステートメントはログに役立つため、無効にしたくありません。しかし、それらが mysql out 変数、そして最終的には UNIX 変数にも現れたくないのです。

これはmysqlプログラムです

ああああ

P粉924915787P粉924915787441日前601

全員に返信(2)返信します

  • P粉203648742

    P粉2036487422023-09-09 07:57:11

    "debug" ス​​テートメントは stdout に出力され、select @out; も stdout に出力されるため、MySQL クライアントはそれらを区別できません。このプロセスには出力リダイレクト機能がありません。

    したがって、創造的に考える必要があります。

    1 つのアイデアは、デバッグ ステートメントに共通のパターンがあることを確認して、それらをフィルターで除外できるようにすることです。たとえば、「#DEBUG」という単語を一貫して使用します。

    リーリー

    次に、Bash から呼び出すときにフィルターします:

    リーリー

    もう 1 つのアイデアは、デバッグ ステートメントが条件付きでのみ出力されるようにコードを変更することです。

    リーリー

    デバッグ出力が必要な場合は、次のように呼び出すことができます:

    リーリー

    デバッグ出力が必要ない場合は、@debug=1 を設定しないでください。

    最も重要なことは、MySQL ストアド プロシージャは多くの状況において非常に不便であるということです。実際のデバッガ、パッケージ、コンパイラ、標準ライブラリ、アトミック デプロイメントなどはありません。私は長年 MySQL を使用してきましたが、このプログラムの有効な使用法はほとんど見たことがありません。

    返事
    0
  • P粉818561682

    P粉8185616822023-09-09 00:57:17

    ###予測:###

    Debug ステートメントと
      select @out
    • は別の行に表示されます (OP の元の質問と同様) 最後の行以外のすべてをログ ファイルに追加する必要があります
    • 最後の行は変数に保存されます
    • すべての出力を変数にキャプチャする OP の現在のメソッドのコピーから始めます:
    リーリー

    最後の行以外のすべてをログ ファイルに追加するには:

    リーリー

    最後の行を新しい変数にキャプチャするには:

    リーリー

    返事
    0
  • キャンセル返事