問題タブ [bind-variables]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
5893 参照

java - oracle altersessionquery用のJavaプリペアドステートメントパラメータ

言語設定を変更するためにoraclealtersessionクエリを実行しようとしましたが、「ORA-01036:不正な変数名/番号」というエラーで失敗します。

Oracleでは、ddlステートメントで変数をバインドすることはできません。バインド変数にはパフォーマンスが向上し(私のユースケースでは、このセッション変更クエリはWebアプリケーションで使用されるすべての接続で実行されます)、アプリケーションがSQLインジェクションを実行できないようにするためです。変数をバインドしない場合、上記のセッション変更クエリを実行する他の最適化された方法はありますか?

0 投票する
6 に答える
19733 参照

sql - Oracle BIND 変数での複数値の宣言

Oracle SQL PLUSコマンドプロンプトのBIND変数に、約3000個の値を複数渡そうとしています..

その変数リストに一致するEMP列のテーブルのすべての値をフェッチする必要があるため、結果を確認したいと思います。JOB


実稼働環境であるため、テーブルを作成することはできませんが、SELECT 句に権限を付与しています。

UNIX-SQL PLUS 環境から同じクエリを実行したときに、それがどのように正確に実行されるかについて、さらに詳しい情報が必要です。

BIND 変数の値を入力するよう求めるプロンプトが表示されますか、それとも次のような値を持つファイルを参照できますか? :JOB1 := 'MANAGER' :JOB2 := 'CLERK' :JOB3 := 'ACCOUNTANT'

0 投票する
4 に答える
1810 参照

sql - Oracleでのバインド変数とリテラルの混合

この質問はDBスタック交換サイトに適しているかもしれませんが、私にはわかりませんでした。

とにかく、私はクエリの最適化を扱っていますが、バインド変数を使用するとパーサーがそれほど難しくないことを学びました。実行中のクエリに改善が見られましたが、バインド変数用にソフトウェアから渡された静的変数を削除することも役立つかどうか疑問に思っています。次に例を示します。

私はそれをサブアウトして言うことができます

私はただ変更を加えるだけですが、実際にソフトウェアでそれを行い、それがもたらす違いを確認するプロセスは、やや長くて退屈です。(最初の例のように)リテラルを混合すると、それらが常に同じであっても、オプティマイザーの効率が損なわれるかどうかを誰かが知っていますか?

前もって感謝します。

0 投票する
1 に答える
665 参照

sql-server - バインド変数オプション

? を使用する代わりに、Oracle と同じ表記法、つまり :0, :1 を使用して、SQL Server でバインド変数を示すことは可能ですか。

私は検索しましたが、これについて決定的なものは見つかりませんでした。現時点では、私のソリューションはバインド変数を使用して、データベースで実行するステートメントに値を導入します。これは Oracle でうまく機能しますが、SQL Server と PostGIS でも同じことを行う必要があります。たとえば、次のように言う必要はありません。

*AddParameter() は、作成した実行関数を呼び出すときに、コマンド オブジェクトに追加されるリストに値を追加するラッパー クラスの関数です。

上記のようにハードコードされたものを含めずに、コードをできるだけきれいにしたいと思います。すべてに適合するソリューションを希望します。(はい、これはおそらく希望的観測であることはわかっています!)

これを行うために文字列置換を使用できることは知っていますが、それは私が求めているものではありません。私は本当にそのような回避策を使いたくありません。また、プロジェクト マネージャーから、バインド変数を使用して解決策を見つけるように依頼されました。

何か案は?

0 投票する
2 に答える
1035 参照

plsql - PL/SQLでのバインド変数へのアクセス

OracleExpressEditionエディタでプログラムを実行しようとしています。プログラムを実行すると、エラーが発生します

誰かが私がエラーを受け取る理由とコードを修正する方法を理解するのを手伝ってもらえますか?

私が得ている出力

0 投票する
1 に答える
1053 参照

java - DDL ステートメントではバインド変数を使用できません。代替案?

まず、序文: jdbc を使用してデータベースに一時テーブルを作成する Java クラスを作成しています。JSE6 と Oracle 11XE をテスト DB として使用していますが、クラスも DB2 に準拠している必要があります。

私が作成しようとしている一時テーブルは、より大きなテーブルから取得され、データに対していくつかのフィルタリングと集計を行います。フィルタリングのベースとなるパラメータは、実行時にユーザーによって決定されます。私がやろうとしていることの1つの簡単な例はこれです:

私の問題は、データをフィルター処理するためにパラメーターを指定する必要があり、それらが適切にエスケープ/ローカライズ/型付けされていることを確認する必要があることです。これは準備済みステートメントを使用すると簡単ですが、DDL でバインド変数を使用することはできません。私が頼った一時的な解決策は、クエリ文字列を自分で変更し、正しい場所にパラメーターを書き込むことですが、これは、失われたことに加えて、PreparedStatement オブジェクトに頼るのではなく、すべてのチェックを実装する必要があることを意味します。他のすべての利点。

他の解決策を調査しましたが、今のところ納得できるものはありませんでした:

  1. 最初に空の temp_table を作成してから INSERT INTO temp_table(id, column1) (SELECT ...) で埋めることもできますが、パフォーマンスが低下する可能性があるため、CREATE temp_table AS に固執したいと思います

  2. 内部の SELECT クエリを保持する一時的なステートメントを作成し、適切にフォーマット/ローカライズされたものを生成することを考えました。クエリ文字列ですが、そこから最終的なクエリを取得する方法が見つかりませんでした(ここでは絶対に不可能だと読みました)。この場合に見つけた唯一のオプションはDebuggableStatementを使用することですが、それをプロジェクトに含めることができるかどうかはわかりません (また、私の問題を解決するための非常に洗練されていないようです)

  3. 私が考えている別の解決策は、一時テーブルを作成するクエリを単純に配置することです(それぞれに対して、CREATE AS(SELECT ...)全体をデータベースのプロシージャ内に配置します。次に、CallableStatement を使用して呼び出すことができます。このようにして、データベースとのより緊密な結合という代償を払って、型化の処理を回避し、それでも良好なパフォーマンスを得ることができます (プロシージャがそこにあることを確認するか、Java でそれらの追加を管理する必要があります)。 /データベースからの削除)

だから、私の質問は、私が考えることができるものよりも優れた代替手段はありますか?

0 投票する
2 に答える
7887 参照

oracle - 複数の行が返されるSQLPlusでバインド変数を使用していますか?

これはばかげた問題ですが、私はそれを回避できないようです。OCIプログラムで問題を引き起こしているクエリがあるので、SQL * Plusで手動で実行して、そこに違いがあるかどうかを確認したいと思います。これはクエリです:

comment_idを値3052753にバインドしたかったので、次のようにしました。

これにより、このエラーが発生します。

さて、このクエリを根本的に変更したくないので、私はすでに不満を持っていますが、とにかく私は前進してこれを思いつきます(INTOとUNIONはそれほどスムーズに連携しません):

しかし今、もちろん、私は1行以上を返すので、完全に予測可能になります

これで、カーソルなどを使い始めることができますが、私の小さなクエリは、元の自己からますます歪んでいます。私がやりたかったのは、comment_idの値でクエリが正常に実行されたかどうかを確認することだけでした。もちろん、comment_idをクエリにハードコーディングするだけで、問題なく機能します。ただし、OCIでも正常に機能するため、SQL * PLusで、OCIコードに表示されているバインド変数の問題を再現します。しかし、SQL * Plusでこれを行うのはなぜそんなに苦労するのでしょうか?私は本当に明白な何かを逃したことがありますか?

データベースはOracle10.2.0.1.0です-RedHatEnterprise Linux ESリリース4(Nahant Update 8)で実行されている64ビット

0 投票する
2 に答える
1237 参照

sql-server - Sybase ASE および SQL Server のバインド値の最大数を回避する方法

フォームの大規模な条件に対してjOOQ統合テストを実行しています

上記の例は、条件に多くのバインド変数があることを示していINます。Oracle には、IN 条件の括弧間の値 (バインド値またはインライン値) が 1000 というよく知られた制限があります。解決策は簡単です。次のように書くだけです。

一方、Sybase ASE 15.5 と SQL Server 2008 R8 では、バインド値の数に全体的な制限があるようです。それぞれ、Sybase ASE では 2000、SQL Server では 2100 です。つまり、これら2つのデータベースのバインド値を使用して上記の条件を分割/変換する方法はないようです。すべてのバインド値をインライン化する以外に、その問題を回避する方法はありますか?

0 投票する
1 に答える
2786 参照

ruby-on-rails-3 - バインド付きのレールアクティブレコード挿入

Rails 3.2.6でアクティブレコードを備えたmysql2アダプターを使用しています

生の挿入中にバインド変数を使用したいと思います。選択に挿入を行っているため、通常のモデルを使用できません。

何かのようなもの:

私は Rails に不慣れで、これを行うのがいかに難しいかに驚きました。これは、Model クラスなどを使用する通常の Rails 規則ではないことを理解しています。パフォーマンスとセキュリティ上の理由から、バインド変数を使用したいと考えています。理想的には、 How to execute a raw update sql with dynamic binding in rails で指定されているように raw_connection を使用したくない