問題タブ [cx-oracle]

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 に答える
1280 参照

python - Pythonのcx_Oracleで変数をバインドする例外

さて、私はPython2.7のOracleデータベースとインスタントクライアント11.2に対してコンパイルされたcx_Oracle5.1に接続しています。私はデータベースにカーソルを持っていますが、SQLの実行はこれを除いて問題ではありません:

また

どちらもoracleからのエラーになります。

実行中:

完璧に動作します。その変数をバインドすることの問題は何ですか?

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

python - Oracle スタック トレース ファイル Python cx_Oracle があります。

私の python アプリケーションは死んでいます。この oracle トレース ファイルが生成されています。cx_Oracle を使用していますが、このトレース ファイルを使用してこのクラッシュを解決するにはどうすればよいですか?

ORA_18225_139690296567552.TRC KPEDBG_DMP_STACK()+360 <-KPEDBGCRASH()+192 <-KPUREQ2()+3194 <-OCISTMTPREPARE2()+157 0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010<-0000000000EA3010

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

django - 再起動時に httpd に渡さない限り、django が一部の環境変数を無視するのはなぜですか?

これは私のアプリケーション環境です:

問題: cx_Oracle が Oracle ハンドルを取得できないため、Web ブラウザから Django Web サイトにアクセスできません。

テスト:

  1. django-admin.py シェルを実行してデータベースをクエリする DOES WORK (ORACLE_HOME および LD_LIBRARY_PATH vars セットを使用して bash セッションから実行)
  2. ORACLE_HOME と LD_LIBRARY_PATH を os.environ に追加し、django DOES WORK を使用せずに cx_Oracle を使用して DB に接続するカスタム スクリプトを実行する (ORACLE_HOME と LD_LIBRARY_PATH 変数が設定された bash セッションから実行する)
  3. 「sudo -u apache」で同じカスタム スクリプトを実行しても機能しない
  4. 「sudo -u env ORACLE_HOME=foo LD_LIBRARY_PATH=foo myscript.py」で同じカスタムスクリプトを実行すると動作します
  5. django.db.backends.oracle.base.py を変更して、Database.connect ステートメントの前に os.environ をファイルに出力し、ORACLE_HOME と LD_LIBRARY_PATH が正しく設定されていることを示します
  6. adhoc django wsgi.pyスクリプト内のos.environmentでORACLE_HOMEとLD_LIBRARY_PATHを明示的に設定しても機能しません
  7. 「sudo env ORACLE_HOME=foo LD_LIBRARY_PATH=foo /etc/init.d/httpd restart」で httpd を再起動すると機能します

私の質問は、テスト 7 がテスト 2、5、6 と異なるのはなぜですか? 別の言い方をすれば、環境変数を python/django スクリプトで設定するだけでなく、親の httpd プロセスに渡す必要があるのはなぜですか?

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

python - cx_Oracleと例外処理-グッドプラクティス?

cx_Oracleを使用してOracleインスタンスに接続し、いくつかのDDLステートメントを実行しようとしています。

ただし、ここでの例外処理に最適な設計は何かわかりません。

まず、db接続エラーをキャッチするために、tryブロック内にオブジェクトを作成します。

ただし、接続できない場合は、それdb以上下に存在しません。これが、上記で設定した理由ですdb = None。しかし、それは良い習慣ですか?

理想的には、接続のエラー、次にDDLステートメントの実行のエラーなどをキャッチする必要があります。

ネストの例外は良い考えですか?または、このような依存/カスケード例外を処理するためのより良い方法はありますか?

また、スクリプトを終了させたい部分(接続障害など)もあります。したがって、コメントアウトされたsys.exit()呼び出しです。ただし、このようなフロー制御に例外処理を使用することは悪い習慣だと聞いています。考え?

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

python - cx-oracleでの並列実行

私は最近新しい会社に加わり、Python(彼らが好むスクリプト言語)に不慣れで、cx_oracleを使用していくつかのETLプロセスを作成しています。これまでに作成したスクリプトは、OracleソースDBから必要な列のサブセットを選択し、外部プロセスがそのデータの読み取りとターゲットへの挿入を待機している名前付きパイプに出力を書き込むシングルスレッドジョブです。 。

これは、5億から20億行の範囲にあるいくつかのテーブルに到達するまでは正常に機能しました。ジョブは引き続き機能しますが、完了するまでに何時間もかかります。これらの大きなソーステーブルはパーティション化されているため、異なるパーティションの並列読み取りを調整して、2つ以上のスレッドを同時に動作させ、それぞれが別々の名前付きパイプに書き込む方法を研究しようとしています。

同じテーブルの異なるパーティションから読み取る複数のスレッドを処理するためのエレガントな方法がcx-oracleにありますか?

これが私の現在の(単純な)コードです:

一部のソーステーブルには1000を超えるパーティションがあるため、パーティション名をハードコーディングすることはお勧めしません。私はパーティション名の配列を設定してそれらを反復処理することを考えていましたが、他のアイデアがあれば聞いてみたいと思います。

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

python - cx_oracle から SQL スクリプト ファイルを実行しますか?

Python で cx_oracle を使用して SQL スクリプト ファイルを実行する方法はありますか。

SQL ファイルでテーブル作成スクリプトを実行する必要があります。

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

python - Pythonで匿名のPL/SQLブロックを使用してクエリ結果としてOracleからデータを取得するにはどうすればよいですか?

私が見つけることができるPL/SQLの使用例はすべて、次のようになります(この例はウィキペディアから抜粋したものです)。

言い換えれば、それらすべてに共通することが1つあります。実際にデータをどこかに出力するときは、データを貼り付けDBMS_OUTPUTます。これは、アプリケーションがデータを処理するのに非常に役に立たない場所のようです。

PL / SQL機能を使用してOracleデータベースからデータを取得したい場合、このデータがプレーンSQLクエリの結果であるかのようにするにはどうすればよいですか。たとえば、DELETE ... RETURNING ... INTOSQLステートメントによって削除された行を、 SELECT ... FROM ...?の結果を処理するのと同じ方法で処理したい場合です。

データベースのスキーマを変更したり、ストアドプロシージャを作成したりしたくありません。やりたいだけですcursor.execute("begin; ... something; end"); results = cursor.fetchall()

特に、そのAPIはデータベース実装間で移植できないため、変数を作成したくありません。cursor.var()(もちろん、SQLも移植可能ではありませんが、さまざまなデータベースバックエンド用にカスタムSQL文字列を生成する必要があることは一般的に受け入れられています。)

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

python - cx_Oracle - クエリ結果を Raw にエンコード

編集:

次のプリントは、私の意図した値を示しています。

(sys.stdout.encoding と sys.stdin.encoding はどちらも「UTF-8」です)。

変数の値が出力値と異なるのはなぜですか? 生の値を変数に入れる必要があります。

元の質問:

BD のクエリと値の Python へのデコードで問題が発生しています。

DB NLS_LANG を使用して確認しました

どこ

私は両方を試しました(同じものを返します)

どこ

クエリの結果を適切な 'João' に戻す方法は?

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

python - cx_Oracle.so: 未定義のシンボル: PyUnicodeUCS2_AsEncodedString

cx_oracle のインストールに問題があります。Oracle InstantClient と cx_oracle Oracle パッケージをインストールしましたが、cx_oracle のインポート中にこのエラーが発生します。ホストとしてubuntu 11.10を実行しています。

誰もがこの問題を解決する方法を知っています

乾杯

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

python - cx_Oracle内からSQL*PLUS COPYを使用していますか?

2 つの Oracle データベース スキーマ間でレコードをコピーする必要があります。

手動では、SQL*PLUS COPY コマンドを使用してこれを行うことができます。

http://www.oracleutilities.com/SQLPLus/copy.html

ただし、可能であれば cx_Oracle を使用してこれを自動化したいと考えています (SSH のやり取りなど、他のことも行う必要があるため、Python と cx_Oracle を使用します)。

ただし、cx_Oracle 内で COPY を実行しようとすると、コマンドが気に入らないようです。

これは、標準の SQL 仕様の一部ではなく、COPY が SQL*PLUS 固有のコマンドであるためだと思いますか?

とにかく、COPY コマンド (またはその他の SQL*PLUS 固有の拡張機能) を cx_Oracle で動作させる方法はありますか?

INSERT INTO...SELECT を使用して同様のことを達成することは可能だと思いますが、問題の 2 つのデータベースが別々の Oracle インスタンスまたはホスト上にあり、それらのリンクを作成する権限が常にあるとは限らない場合、データベース リンクが必要です。

乾杯、ビクター