問題タブ [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.
php - Oracle ストアド プロシージャから OCI8 経由でテーブルを返す
OCI8経由でOracleに接続しています。
私はストアドプロシージャを持っています:
そして、OCIを使用してPHPに戻そうとしています:
(必要な php 側の OCI の残りの部分は用意されています。)
私が得ているエラーは次のとおりです。
警告: oci_execute(): ORA-06550: 行 1、列 7: PLS-00306: 'OCIGETACCOUNTS' の呼び出しで引数の数または型が間違っています
テーブルリソースをコンテナ化するために $result を取得するにはどうすればよいですか
ruby-on-rails - Oracle/OCI ライブラリをロードできませんでした: RubyGem バージョン エラー: ruby-oci8(1.0.7 not >= 0)
明らかに 1.0.7 は 0 より大きい
入ってきて、Rails アプリを使用しようとしたところ、これが表示されました。昨日働いた。
そこで、ruby-oci8 1.0.7 gem を削除して再インストールしました。同じ問題。
私のアプリと同じ問題の別の開発ブランチを試しました。
Windows インストールで RoR を実行していますが、何が壊れたのかについて何かアイデアを探していますか?
php - SLESはphp/apache全体をコンパイルせずにphp-oci8をインストールしますか?
oci8をダウンロードせずにOracleのoci8-pkgをSuseLinuxEnterprise Server(SLES)にインストールし、それを使用してphpをコンパイルする方法はありますか?
最終的には、ZypperまたはPearのようなインストールですか?
最新のものは何ですか?
私はこれらの次のリンクを見ました:
- http://forums.opensuse.org/english/get-technical-help-here/how-faq-forums/unreviewed-how-faq/455756-installing-oracle-instant-client-11_2-suse-11-4- a.html
- http://www.oracle.com/technetwork/articles/technote-php-instant-084410.html
- http://www.howforge.com/how-install-oci8-php-5-ubuntu
最初の2つはphpのコンパイルに関するもので、最後の2つはpearを介したインストールに関するものです。
選択する方法は?それらのいずれかが古くなっていますか?
乾杯
c++ - OCIErrorGetから制約エラーを取得するにはどうすればよいですか?
私たちのC++プログラムは、OracleとOCIを使用してデータベース作業を行っています。場合によっては、ユーザーが制約違反をトリガーします。これを検出して、OCIErrorGetからのエラーメッセージを表示します。OCIErrorGetは、次のような文字列を返します。
Oracleエラーから「MYSCHEMA.CC_MYCONSTRAINT」を抽出する最もクリーンな方法を探しています。制約の名前がわかっているので、より適切なエラーメッセージを表示できます(制約名にアクセスできる場合、コードは非常に意味のあるエラーメッセージを検索できます)。
正規表現などを使用して、Oracleメッセージが変更されることはないと想定できますが、これは私には少し壊れやすいようです。または、特定のORAコードを探して、括弧の間にあるテキストを取得することもできます。しかし、制約が失敗した場合に、ハードコードされた文字列操作に頼ることなく、失敗した制約の実際の名前を把握するための、よりクリーンで堅牢な方法がOCIにあることを望んでいました。
何か案は?
oracle - OCIドライバを使用したOracle OIDのJDBC接続文字列
OID とシン クライアント jdbc ドライバーを使用して Oracle に接続する方法を知っています。
ただし、jdbc、oci、および oid を使用して接続することはできません。Oracle は無効な URL メッセージを出力し続けます。私は次のことを試しました:
ORACLE_HOME を 10g データベース用に設定しました。ライブラリを LD_LIBRARY_PATH に追加しました。java.library.path システム プロパティを設定しました。最後に、sqlplus とシンボリック oid 名を使用して接続できます。
どの接続文字列を使用する必要がありますか?
php - ORA-12154 PHP OCI8 グリーフ
Oracle の 11g XE (景品バージョン) を使用して CentOS 5.6 サーバーを構成し、このガイドを使用して OCI8 をインストールし、問題なくデータベースと通信する既存の (カスタム) PHP アプリケーションを取得しました。そのサーバー Dev を呼び出し、次のビルドを開始しました。
私が現在取り組んでいる Prod サーバーは、Oracle 11G が無料版ではなく標準版であることを除いて、Dev と同じです。私の知る限り、他のすべては同一です。間違いなく同じ OCI RPM です。
警告: ocilogon() [function.ocilogon]: ORA-12154: TNS: /var/www/html/blah/blah.php で指定された接続識別子を解決できませんでした
「環境」の問題があると確信していますが、それを解決する方法がわかりません。
Oracle、Apache、OCI8、および PHP はすべて同じボックスに含まれています。
機能するもの:
tnsping orcl
Prod サーバーから。sqlplus user@orcl
Prod サーバーから。phpconfig();
すべてのOCI8のものを示しています。Dev と Prod の結果を比較すると、同じ結果が得られました。- VPN の反対側にある XP クライアントから Toad 経由で接続することもできます。
PHPをDBと通信させることができません。私を怒らせる!
Prod サーバーでグローバル検索を行ったところ、tnsnames.ora ファイルが 1 つしかありません。外観は次のとおりです。
ORCL = (説明 =
(アドレス = (プロトコル = TCP)(ホスト = localhost.localdomain)(ポート = 1521))
(CONNECT_DATA =
(サーバー = 専用) (サービス名 = orcl)
) )
役立つものを提供する必要がありますか? コメントを残してください。
私は本当に製品ボックスを平らにして最初からやり直したくありません...これを理解するのを手伝ってください!
[編集]
聞き手を見つけていないのでしょうね。好奇心から、リスナー サービスを停止し、エラーについて何も変わらないことを確認しました。
リクエストにより、ここにいくつかのコードがあります。
上記のエラーをスローするコード:
変数は別のファイルで設定されます。
...
しかし、それをスキップできます。それらをコピーしてここに貼り付けている間、括弧を並べるのに少し時間がかかりました-そして、余分なものを見つけました.
打ち間違え!
どー。/facepalm.
oracle - OracleOCI-フェッチの遅延と失敗
Oracle OCIプログラムがあります。これは、SLES Linux、Ubuntu、AIX、Solaris、HP-UXなどのさまざまなプラットフォームで運用されています。Redhatで同じことを実行しようとしていますが、問題が発生しています。
この問題は、スクロール可能なカーソル(を使用して呼び出すOCIStmtExecute
)OCI_STMT_SCROLLABLE_READONLY
を使用し、バイナリ検索を実行して正確な結果セットのサイズを取得する関数を使用する場合に発生するようです。より一般的には、問題は、OK値を読み取る前に、結果セットの終わりを超えて読み取ることであるように思われます。
1行(SELECT COUNT(*) FROM xxx
)を返さなければならない単純なステートメントを実行するテストユーティリティを作成しました。次に、結果セットからデータを取得します。
最初に行1を取得すると、正常に機能します。その後、結果セットの終わりを超えても、戻ったときに正常に機能し続けます。しかし、私の最初のチェックが結果セットの後である場合、すべてがうまくいきません。
また、問題のない行を取得している間、上記の例では10秒という奇妙な遅延があります。デバッガーでは、これはOCIStmtFetch2関数の奥深くにあります。当然のことながら、サーバーの応答を待機している__read_nocancel関数の奥深くにあります。
他の誰かが以前にこの問題を見たことがありますか?
c++ - Autotools:ビルド済みのサードパーティライブラリを含む
私は現在、それぞれが独自のMakefileのセットを使用するC ++バイナリのセットを、Autotoolsをベースにしたより新しいものにアップグレードするために取り組んでいます。ただし、サードパーティのライブラリ(Oracle Instant Clientなど)をビルド/パッケージ化プロセスに含める方法がわかりません。
これは私が見逃した本当に単純なものですか?
編集して詳細を追加
私の現在のビルド環境は次のようになります。
現在、トップレベルのbuild.shは次の手順を実行します。
- 各libのMakefileを実行し、出力を/ build/libにコピーします
- 各バイナリのMakefileを実行し、出力を/ build/binにコピーします
各Makefileには、さまざまな兄弟ディレクトリへのハードコードされたパスのセットがあります。言うまでもなく、これは維持するのが悪夢になっています。私はautotoolsのテストを開始しましたが、行き詰まっているのは、コンパイル時のリンクとディストリビューションへのバンドルのために/src/lib/oci/*.soを/build/libにコピーするのと同じことを考えています。
oracle - varchar2 列の値を取得するときにバッファのサイズを動的に変更することはできますか?
多くの潜在的に大きな文字列のFAT行を含むテーブルがあるとします。
create table t (s1 varchar2(4000), ..., sN varchar2(4000))
直接バインドを使用してこれらの列をフェッチする方法を知っています。
このアプローチの問題点は、すべての列の最大サイズをアプリオリに知る必要があることです (記述でそれを知ることもできますが、それはより多くの作業です)。また、各セルにデータが含まれている場合、多くの大きなバッファーを事前に割り当てる必要があります。実際にははるかに小さいです。
OCI_DEFAULT を OCI_DYNAMIC_FETCH に置き換え、OCI_DEFAULT を OCI_DYNAMIC_FETCH に置き換え、OCIDefineDynamic を使用してコールバックを登録し、動的にバッファを提供するために OCI_FIRST_PIECE で呼び出されましたが、ここでも、提供されたバッファは十分な大きさでなければならず、OCI はそうではありません。フェッチされた varchar2 列の実際のサイズを提供して、必要なだけ動的にバッファのサイズを変更できるようにするか、短すぎるバッファを受け入れて OCI_NEXT_PIECE で再度呼び出して、値を蓄積できるようにしますチャンクごとに。
今私は体系的に取得しますORA-01406: fetched column value was truncated
動的に割り当てられたフェッチ バッファの例を教えてください。ティア、 --DD