問題タブ [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.
c++ - ORACLE で OCI(c++) を使用した挿入クエリの問題
問題の説明:- そのレコードがデータベースに既に存在する (重複 ==> 主キーが存在する) 場合、そのレコードを Oracle に挿入しています。新しいレコードで更新したいと考えています。
現在、OCI_ERRORを取得した場合にレコードを挿入するときにこれを解決するために、呼び出します
OCIErrorGet( (dvoid *)errhp, (ub4) 1, (テキスト *) NULL, &errcode,errbuf, (ub4) sizeof(errbuf), OCI_HTYPE_ERROR);
次に、エラー buf の値が ORA-00001 であるかどうか errbuf をチェックします ==> 存在する場合は一意の制約に違反し、値を更新します
そのレコードが既に存在する場合、データベース内のレコードを検索する以外に同じことを行う方法はありますか?
ORACLE で値が重複している場合、特定のエラーが生成されますか?
助言がありますか?
oracle - ora-01406 OCI を使用して値をフェッチするときにエラーが発生しました
これは、最大長が 50 の値を 30 文字しか保持できないバッファにフェッチするときに発生します。
私はすでにエラーを調べ、可能な解決策を見つけました。それは、値がバインドされているバッファのサイズを拡張することです。
問題は、これが一部のシステムでのみ発生し、他のシステムでは発生しないことです。Oracle のバージョンはこれと関係がありますか? もしそうなら、このエラーが変更されたバージョンは何ですか?
使用する Oracle のバージョンは 10.2.0.1 と 10.2.0.3 です。
oracle - oopen カーソルは前方専用で読み取り専用ですか?
(Oracle 7.x OCI api から) oopen で作成されたカーソルは、前方専用および読み取り専用ですか?
ありがとう、
エリック
oracle - OCI: クエリ列のテキスト表現の長さを決定する
私の目標は、クエリ (SELECT) を実行し、結果を取得して text として出力することです。クエリはパラメーターとして指定され、たとえばselect * from t
.
と を使用するOCIStmtPrepare
とOCIStmtExecute
、クエリの列をOCIParamGet
と の系列で記述できますOCIAttrGet
。OCI_ATTR_DATA_TYPE
列の 1 つで = 12 (DATE)を取得するとします。Then OCI_ATTR_DATA_SIZE
= 7 -- これは内部 DATE 表現のサイズです。
現在の NLS 設定に関して、この DATE をテキストとして取得したいと考えています。そのためにOCIDefineByPos
、 dty = を使用しSQLT_STR
ます。問題なく動作しますが、フェッチ用のバッファも提供する必要があります。問題は、どのサイズのバッファが必要かということです。
に依存していることは明らかNLS_DATE_FORMAT
です。オラクルはこの値を知っていると思います:
これが正確な長さです。日付形式が Oracle から (関数などによって) マスクされている場合にのみ、絶対最大 (?) 値の 75 を使用します。
上記はすべて NUMBER にも当てはまります。
では、OCI で列のテキスト表現の長さを取得することは可能ですか?
perl - Oracle 9i OCI ドライバーは Oracle 10g サーバーで動作しますか?
私はDBD::Oracle
、9.2.0.8 OCI クライアントに対してコンパイルされた Perl アプリケーションを担当しています。これは、sun4u
32 ビット バイナリではありますが、ボックス上にあります。DBD::Oracle は 32 ビット OCI ライブラリに対してリンクされています。現在、9i サーバーに対して実行しています。
当社の DBA チームは、サーバーを 10g、つまり 10.2.0.4 にアップグレードすることを計画しています。私は2つのオプションに直面しています:
- 新しい 10g サーバーに対して 9i ドライバーを引き続き使用します。
- または、クライアントを 9.2.0.8 から 10.2.0.4 にアップグレードして、サーバーのバージョンと一致させます。
さまざまな運用上の理由から、上記の ( 1 ) を使用することをお勧めします。ただし、9i OCI クライアントが 10g Oracle サーバーで動作するかどうかはわかりません。これはできますか?
oracle - Oracle OCI: 日付フィールドを使用したクエリ
OCI でコンパイルされたクライアント: 10.2.0.4.0
サーバー: Oracle9i Enterprise Edition リリース 9.2.0.4.0
問題のあるクエリは次のとおりです。
テーブルの説明:
シンプルに見えるかもしれませんが、SQLPlus を使用してサーバー上で直接実行すると結果が返されますが、OCI を使用するアプリから実行すると、このクエリはOCI_NO_DATA
always を返します。最初は、日付の値もプレースホルダーでしたが、リテラル like を指定しても機能しないことがわかりました'05-JUL-08'
。私は次のことを試しました:
- 私は基本を試しました: クライアントから DB にクエリを実行すると機能します。困ったのはこいつだ
以下は機能します:
/li>ALTER SESSION SET NLS_DATE_FORMAT="DD-MM-YYYY";
サーバーとクライアントの両方でクエリの前に実行します。同じ結果: サーバーはデータを返し、クライアントはOCI_NO_DATA
DATE_PROC
これを の使用と組み合わせて、フォーマットを変更しようとしましたTO_DATE()
。同じ結果です。- 探した、探した、探した。答えがありません
答えを見つけるのに少し必死です。助けていただければ幸いです。必要に応じて、さらに多くの詳細を提供できます。ありがとう。
---詳細情報---
trunc() と「alter session set nls_date_format」を使用してさまざまな組み合わせを試しました...これが得られるものです:
サーバー: 戻り値: "BancoOne" (適切な値)
OCI アプリ:戻り値 OCI_NO_DATA
サーバー内: 戻り値: "BancoOne"
OCI アプリ内: 戻り値 "BancoOne"
要点は、両方が同じ DB サーバーにアクセスしている場合、OCI アプリが異なる結果を出すのはなぜですか?
また、OCI アプリの目的を明確にするために、ユーザーが構成するクエリがあります。アイデアは、ユーザーが必要に応じてクエリを調整して、宛先 DB に存在する日付フィールドに適合させることです。そのため、日付形式がわからないため、「alter session set nls_date_format」ステートメントをコードに含めるべきではありません。このようにして、ユーザーに柔軟性を提供し、特定の日付形式に依存しないようにします。これは理にかなっていますか?助言がありますか?
c - Oracle OCI トリガーの作成
OCI API を使用してトリガーを作成する方法はありますか?
プログラムで次のアクションを実行する必要があります。
php - PHP文字列は複数の変数挿入のようではありませんか?
OracleDatabase11.1でPHP5.2を使用しています。
コード
このエラーが発生します:
警告:oci_execute()[function.oci-execute]:ORA-00904: "コメント":159行目のC:\ IODwww\hello.phpの識別子が無効です ^
しかし、これを実行すると正常に機能します。
これは、クエリ文字列に複数の変数を挿入した結果ですか、それとも他の間違いを犯した結果ですか?
php - Oracle、PDO_OCIとOCI8
私が働いている会社は現在、DB接続の手段としてOCIライブラリを抽象化するためにいくつかの基本的な機能を使用しています。PHPのPDOオブジェクトへの切り替えを検討していますが、いくつかのクイック検索から、Oracleドライバーは他のPDOドライバーよりも少し成熟していないようです。PDO / oci8を実稼働環境で使用したことのある人なら誰でも、PDO/oci8の賛否両論をいただければ幸いです。
ありがとう!