問題タブ [oracle-call-interface]

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 投票する
1 に答える
1085 参照

c++ - Ocilib使用時に文字列バッファを埋める

Ocilibを使用してOracleデータベースで一括挿入を実行していますが、文字列バッファーの入力中に問題が発生しています。

ドキュメントには次のように書かれています。

文字列/RAW配列の場合、入力配列は、ポインタの配列ではなく、データの連続ブロックである必要があります。したがって、varchar2(30)列の10個の要素の配列をバインドするには、バインドされた変数はarray[10][31]のようである必要があります。

そして、サンプルは次のようにバッファを埋めていきます。

MyClassのstd::vectorをループしながら、文字列バッファを埋めようとしています。MyClassにはstd::stringメンバーがあります。

std :: string :: copyメソッドを使用して、文字列の内容をバッファにコピーしようとしています。しかし、それを行うためにバッファにインデックスを付ける方法を正確に知りません。

最初の方法では、データベース内のバグのあるデータが得られます。2つ目は、nullポインタをヒットさせます。

私が間違っているのは何ですか?

PS

2番目のアプローチは、以下のAlessandro Verganiによって提案されたアプローチに沿っており、null文字列が挿入されます。最初のアプローチでは、この(やや奇妙な)結果が得られます。

データベースの内容

gvimウィンドウには、どのように表示されるかが表示され、apex画面には、データベースに保存される内容が表示されます。

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

php - oci_new_collectionを使用して、パッケージ内で定義されたVARRAYタイプにアクセスします

こんにちは私はPHPからOracleにVARRAYを渡そうとしています。私はOCI8を使用しており、以前はストアドプロシージャの引数としてVARRAYを使用しており、コンパイル時にそれらのVARRAYのタイプが作成されます。したがって、PHP側でコレクションインスタンスを作成するときに、コレクション名を直接指定できます。

元:

ここで、MY_ARRAYは、Oracleインスタンスで宣言した配列タイプになります。

したがって、パッケージの外部でそれらを作成すると、型がコンパイルされ、実行中に準備が整います。

パッケージからそれを行うと、エラーが返されます

PHP警告:oci_new_collection()[function.oci-new-collection]:OCI-22303:タイプ""。"my_pack.my_array_type"が見つかりません

私のパッケージヘッダーは次のようになります

これで、PHPから呼び出してコレクションのインスタンスを作成するとき、これが私のやり方です。

警告タイプが見つかりません。

私の質問は、パッケージに含まれているvarrayタイプをどのように呼び出す必要があるかということです。package.type_nameとして実行していますが、タイプが見つからないという警告が表示されます。

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

ruby - ruby-oci8 のアンインストール方法

私が使用している ruby​​ gem には、ruby-oci8 バージョン 2 以降が必要です。 しかし、私のマシンにはすでに ruby​​-oci8バージョン 1.0.0があるようです。しかし、これはアンインストールできません。

gem uninstall ruby​​-oci8 を正常に実行しました。次に、irbタイプを使用して

ruby-oci v1.0.0 から Windows マシンをクリーンアップするには?

ありがとう。

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

oracle - OCI_ATTR_PASSWORDを使用してOCIAttrSetにパスワードを指定した場合、パスワードの大文字と小文字は区別されますか?

(c ++)OCIプログラムのフラグメントでは、次のようにセッションを初期化するためのパスワードを渡す(または設定する)ためにフラグを使用OCIAttrSetします。OCI_ATTR_PASSWORD

後続の

パスワードが小文字で指定されていれば問題なく動作します。の少なくとも1文字がpassword大文字の場合、OCISessionBeginエラーを返しますORA-01017: invalid username/password; logon denied

この動作は、Oracleで見たすべてのパスワード処理とは対照的です。これまで、パスワードは大文字と小文字を区別しないと信じていたためです。しかし、私はこの振る舞いがどこかに文書化されているのを見つけません。それで、これは予想される動作ですか(そして私はドキュメントを見つけることができません)、それとも何か他のことが起こっていますか?

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

php - PHPとoci_bind_by_nameを使用して、値のリストをOracleに渡します

このOracleSQLクエリにバインドまたは渡す番号のリストがあります。

コマンドoci_bind_by_nameを使用して:idListをIDのリストを含む文字列にバインドすることは許可されていますか?IDをセラライズする文字列と見なすことができますか?

例:

シリアル化されたリストはSQL構文の一部ではないため、「ただ」実行不可能のようです。私の目標を達成するためのアイデアはありますか?

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

oracle - OracleOCI接続プーリングとOracleUCP

Oracleは、OCIドライバがJDBC接続に使用される場合、4つの異なるJDBC接続プーリングメカニズムを提供します。

  1. Oracle DataSource
  2. OracleOCI接続プーリング
  3. Oracle UCP(ユニバーサル接続プーリング-OracleDataSourceより推奨)
  4. Oracle DatabaseResidentConnectionプーリング

OCIドライバによって提供されるOracleOCI接続プールと比較して、Oracle UCP(ユニバーサル接続プール)を使用することの長所と短所は何ですか?

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

c - Oracle ネイティブのコンパイル済み共有ライブラリを再利用することはできますか?

OracleはPL / SQLコードのネイティブCコンパイルを実行できるため(コードはgccなどのCコンパイラでサーバーファイルシステムの共有オブジェクトファイルにコンパイルされます)、これについて疑問に思っています。ネイティブにコンパイルされた PL/SQL 関数にリンクする extproc 用の C コードを開発できますか? これは素晴らしいことです。なぜなら、OCI の難しいことはすべて PL/SQL で実行でき、論理的または数学的なことはすべて C で実行できるからです。ヘッダー ファイルを作成できます。.so をリバース エンジニアリングする方法はありますか? 誰かがそのようなハックを試しましたか? 実際の問題を解決するというよりも、「学び、実験したい」ということです。

EDIT1: 私が理解したこと: $ORACLE_HOME/plsql/spnc_commands ファイルを変更し、リンカ コマンドの後ろに cp %(src) /tmp%(src) を追加できます。したがって、生成された C コードを調べることができますが、これは大きな助けにはなりません :-(

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

connection-pooling - OCI接続プーリングでのセッション多重化の利点は何ですか

セッションの多重化が主な利点である OCI 接続プーリングについて研究しています。私が理解していることから、セッションの多重化は、同じ物理接続を介して複数のセッションを持つことです。

いくつかのテストを行った後、その接続の最初のセッションが IDLE の場合にのみ、OCI ドライバーが同じ物理接続を介して複数のセッションを多重化することがわかりました。最初のセッションがすでにアクティブなときに新しいセッションを開始しないのは当然のことのように思えますが、Web アプリケーションでのセッションの多重化の実際の使用法を理解できていません。

アプリケーションが接続を要求し、それを使用しない (つまり、借用した接続が IDLE のままになる) ことは非常にまれではないでしょうか?

OCI 接続プーリングのセッション多重化機能を使用した経験を誰かが共有できれば、すばらしいことです。

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

oracle - OracleOCIクライアントキャッシュが機能しない

Oracle Database 11gリリース11.2.0.2.0を使用しており、ociクライアントキャッシュを有効にしようとしています。動作していません。それを有効にするために私が行った構成の変更は-

  1. サーバー側パラメーター「client_result_cache_size」を10485760(10 MB)に設定して、クライアント結果セットのキャッシュを有効にしました
  2. 上記のパラメータを設定した後、Oracleインスタンスを再起動しました
  3. ステートメントALTERTABLEemp RESULT_CACHE(MODE FORCE)を実行して、テーブルの注釈を追加しました。後でユーザーテーブルをクエリして、アノテーションが適用されていることを確認しました。
  4. クライアント側、つまりJDBCドライバーでステートメントキャッシングを有効にしました。
  5. プリペアドステートメントを使用してクエリを実行し、ステートメントのキャッシュが開始されるようにしました。ドライバーログから、最初のクエリの後の後続のクエリの実行で同じステートメントハンドルが使用されていることを確認しました。

プリペアドステートメントの選択クエリを3回実行した後、CLIENT_RESULT_CACHE_STATS$ビューを確認しました。しかし、このビューでは行が表示されませんでした。

トラブルシューティングの一環として、/ * + RESULT_CACHE * /ヒントをクエリに追加しようとしましたが、ビューで結果が得られませんでした。

プロファイラー(flextracer)から、selectクエリの結果セットをフェッチするためにサーバーに対してOCI呼び出しがまだ行われていることがわかりました。また、SQLトレースを有効にすると、tkprofから、クエリを実行するたびにサーバーでフェッチされる行数が増加し、OCIでのクライアント結果セットのキャッシュが機能していないことがわかりました。

見逃したステップはありますか?

前もって感謝します。

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

visual-c++ - vc++ から oci ライブラリへのリンク エラー

私のCプログラムからデータベースに接続するために、Oracle 9i(個人用edtn)のOCIライブラリを使用しています(ビジュアルC ++ 2005を使用しています)。次のコードでは、リンカー エラーが発生します。

私が得るエラーは、