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>回避策
フォームではなく、JDBC スタイルの ???
バインディング プレースホルダーを使用していることです。 go-ora パッケージのドキュメント
から、次のものを使用していると述べています:
したがって、stmt
は次のようになります:
リーリー
ただし、変数以外のものをバインドすることはできないため、単に削除して次のようにした場合、
を変数として持つことはできません。
リーリー
これは機能しているように見えますが、ソートは値ではなくリテラルの列名でソートされるため、これでも希望どおりには動作しません。したがって、
ORDER BY 'requestnumber'## として機能します。 # に相当するものは、
の代わりに実行されます。そして、その定数文字列で並べ替えても何も達成されません。
ステートメントに順序付け基準を埋め込む必要があります:
リーリー
PL/SQL 動的カーソルを簡略化した同等のものとして使用すると、3 つのバージョンが表示されます。1 つはエラーが発生し、1 つは期待どおりに順序付けされず、最後に 1 つは正常に順序付けされました。 。
ただし、SQL インジェクションが再び行われないように、これらの入力をサニタイズする必要もあります。
以上がGolang のエラー「ORA-00911: 無効な文字」を解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。