ホームページ  >  記事  >  バックエンド開発  >  Golang のエラー「ORA-00911: 無効な文字」を解決するにはどうすればよいですか?

Golang のエラー「ORA-00911: 無効な文字」を解決するにはどうすればよいですか?

WBOY
WBOY転載
2024-02-08 21:39:23702ブラウズ

如何解决 Golang 中的错误“ORA-00911:无效字符”?

Golang の開発プロセス中に、「ORA-00911: 無効な文字」などのエラーが発生することがあります。このエラーは通常、SQL ステートメントで無効な文字が使用されていることが原因で発生します。この問題を解決するには、いくつかの簡単な方法を採用できます。まず、SQL ステートメントを実行する前に、ステートメントに特殊文字や無効な文字が含まれているかどうかを注意深く確認する必要があります。次に、エラーを避けるために、特殊文字を含むフィールドまたは値を引用符で囲むことができます。さらに、エスケープ文字を使用して特殊文字を処理し、SQL ステートメントで特殊文字が正しく認識され、処理されるようにすることもできます。これらの方法を通じて、Golang の「ORA-00911: 無効な文字」問題を効果的に解決し、プログラムが正常に実行できることを確認できます。

質問内容

以下の関数を呼び出す際に「ORA-00911: 無効な文字」というエラーが発生しました。ハードコードされた値を含む SQL クエリを使用すると (現時点では、以下のスニペットでコメントアウトされています)、Postman の JSON 応答でデータベース レコードを問題なく取得できます。つまり、私の議論は間違っているようです。参考までに、私は「github.com/sijms/go-ora/v2」パッケージを使用して oracle db に接続しています。 また、「DashboardRecordsRequest」構造はデータ モデル パッケージ内にありますが、参照のために以下のスニペットに貼り付けました。 POC を行うときは、ストアド プロシージャを使用して Oracle と対話することに注意してください。

Postman リクエストのペイロード:

リーリー

実行コード:

リーリー

リクエストテーブルの構造:

リーリー ###間違い:###
<code>{
    "username": "UserABC",
    "startindex": 0,
    "pagesize": 10,
    "sortby": "requestnumber",
    "sortorder": "DESC"
}
</code>

回避策

当面の問題は、予期される

:var

フォームではなく、JDBC スタイルの ??? バインディング プレースホルダーを使用していることです。 go-ora パッケージのドキュメント から、次のものを使用していると述べています: したがって、stmt

は次のようになります: リーリー ただし、変数以外のものをバインドすることはできないため、単に削除して次のようにした場合、

sortorder

を変数として持つことはできません。 リーリー これは機能しているように見えますが、ソートは値ではなくリテラルの列名でソートされるため、これでも希望どおりには動作しません。したがって、ORDER BY 'requestnumber'## として機能します。 # に相当するものは、

ORDER BY requestnumber

の代わりに実行されます。そして、その定数文字列で並べ替えても何も達成されません。 ステートメントに順序付け基準を埋め込む必要があります: リーリー

dba8093152e673feb7aba1828c43532094fiddle

PL/SQL 動的カーソルを簡略化した同等のものとして使用すると、3 つのバージョンが表示されます。1 つはエラーが発生し、1 つは期待どおりに順序付けされず、最後に 1 つは正常に順序付けされました。 。

ただし、SQL インジェクションが再び行われないように、これらの入力をサニタイズする必要もあります。

以上がGolang のエラー「ORA-00911: 無効な文字」を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。