問題タブ [ibm-db2]
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 - 教義 2 - IBM DB2
Doctrine 2 で DB2 テーブルをマッピングする際に問題が発生しました。アプリケーションが長期間存在し、奇妙な理由で、いくつかの列名の前に「£」特殊文字が追加されました。
例:£ADRB1
ドキュメントをチェックしているときに、これは Doctrine があまり好まないものであることがわかりました。ちなみに、接続はODBCドライバーを介して行われます:/私は変更できません。
エンティティ列は次のように構成されます。
エラーは
SQLSTATE[HY090]: 無効なストリングまたはバッファーの長さ: 0 [IBM][System i Access ODBC Driver] ストリングまたはバッファーの長さが無効です。(/patched-php-src-5.5.7/php-5.5.7/ext/pdo_odbc/odbc_driver.c:206 の SQLPrepare[0])
単純な queryBuilder で結果をフェッチしようとしている間。
Doctrine 2 で動作させる可能性はありますか?
どうもありがとう !
sql - 期間を除く SQL Dwell 計算
現在、アクティビティの「エイジング」列を作成するが、非稼働時間を計算から除外する手動レポートを再作成しようとしています。これを作成することは可能ですか、また、T-SQL (SSMS 2014 または db2 への odbc 接続の使用) でどのように処理しますか?私は適度なレベルの経験を持っていますが、これらの種類の計算に関する情報を見つけることができません。例 :
ただし、計算では 22:00 以降または 06:00 および週末前の時間を除外する必要があるため、「エージング」は 1 時間として読み取られます。
あなたが助けてくれることを本当に願っています!!
mysql - 間に追加すると SQL クエリが高速化されますか?
10M のエントリを持つテーブルがあり、次のクエリがあるとします。
完了するまでに多くの時間がかかります。column_name に特定の範囲があることがわかっている場合、クエリをさまざまなクエリに分割します。それぞれが次のようになります。
対応を早くすることに成功しました。例えば、時間を調べてみると、それを10回のクエリに分割すると、1回のクエリで10倍程度速く応答します。
したがって、その範囲を課すと、クエリが高速になると思います。
ただし、同様のキーと列を持つ別のテーブルでは、これは当てはまりません。間があってもなくても、同じように時間がかかります。
注意すべき点は次のとおりです。
- 最初の DB は SQL 、2 番目の DB は IBM DB
- 最初のケースでは、クエリを実行するUIツールによって時間が測定され、2番目の時間はUnixで時間ごとに測定されます。
- 私は時間を比較しているのではなく、between を使用してクエリ時間を短縮できるかどうかに興味がありますか?
- column_name は主キーではありませんが、主キーの一部です (主キーは複数の列にあります)
それで、私の質問は、これが事実なのか、それとも本当に依存するのかということです. 「間」はクエリ時間を短縮しますか?
sql - DB : トランザクション内でフェッチした後に更新クエリを実行します
私は IBM DB に取り組んでいますが、概念はほとんど同じだと思います。
1 行をフェッチし、これらのデータを返し (または変数に保存してみましょう)、その特定の行のいくつかのフィールドを更新したいと考えています。そのクエリを同時に実行しようとするインスタンスが多数存在する可能性があるため、フェッチ操作をアトミックにする必要があります。
各行には、pending と呼ばれるフィールドがあり、FALSE に初期化されます。1 つのインスタンスがこの行をフェッチすると、これが TRUE に設定されます (これが私が実行したい更新です)。あまりにもアトミックである必要がある理由は、保留中が FALSE であるテーブルの最初の行をクエリがフェッチするためです。
擬似コードでは、次のようなものがあります:
構文について心配する必要はありません。これらはマクロであり、単独で実行されると機能します。問題は2番目のクエリにあると推測していますが、なぜですか?
- 最初にコミットしてから、2 番目のクエリを実行する必要がありますか?
- はいの場合、更新する前に同じ行を読み取るインスタンスが他にないようにするにはどうすればよいですか?
これは、私が使用しているDBとは関係がないと思います。
2番目のものにコメントすると、コードが機能します。2 番目のものをスタンドアロンで実行すると、同様に機能します。
database - デッドロックを引き起こす削除トリガー上の DB2
親テーブルで削除クエリを実行しようとすると、ロックされます。以下はテーブル構造であり、この「 DELETE FROM PARENT WHERE PARENT_ID = 1; 」を実行するとデッドロックが発生します -
------------------関連テーブルの作成-----------------------------
-----------------------テーブルにインデックスを作成する----------------------- ------
------------------------------トリガー テーブルの作成------------------ -----------
---------------レコードの挿入--------------------------------- -----------
ibm-db2 - タイムスタンプに 1 ナノ秒を追加する方法
タイムスタンプに 1 ナノ秒を追加する方法。
私はこれをやっています -
しかし、それは私を助けません。
誰でもこれで私を助けてもらえますか?
php - クエリが成功した場合に db2_fetch_assoc() によって生成されたエラーをキャッチする方法は?
Zend Server 8.0.2 で PHP 5.6.5、ibm_db2 ドライバーを使用して、DB2 for IBM i (iSeries (AS/400)) を使用しています。
名前にエイリアスされたサブセレクトを含むビューが複数の行を返す場合と返さない場合があるインスタンスに遭遇しました。ビューを作成していません。エラーを理解し、修正できます。奇妙な点は、PHP ではエラーが db2_exec() でスローされず、代わりに db2_fetch_assoc() でスローされることです。調査を開始しましたが、db2_fetch_assoc() によって生成されたエラーを適切に検出する方法が見つかりません。これは Zend エラー ログに "db2_fetch_assoc(): Fetch Failure"、E_WARNING ステータスとして記録されます。
db2_stmt_error()
、、および にdb2_stmt_errormsg()
関連するエラーのみを返します。私も次のようなものを使用しようとしました:db2_exec()
db2_execute()
db2_prepare()
例外として登録されません。
私が思いついた最善の方法は、予備クエリを発行して、返される行数を取得することでした。次に、次のように for ループを使用します。
そのようなインスタンスを適切に検出、追跡、または処理する他の方法を知っている人はいますか?
EDIT1:
ここで言及する価値のあるものを見つけることができました: PHP:エラーを適切に管理する方法?
この回答では、警告が発生したときに例外を強制する方法について説明しています (これは から取得したものですdb2_fetch_assoc()
)。欠点は、警告がキャッチされない場合、ページの実行が停止することです。
私が楽しませている考えは、ページ全体を何もしないtry-catch
句でラップすることです(たとえば、ヘッダーインクルードとフッターインクルードにインクルードします)。これにより、ページの実行が可能になり、ネストされた句が許可されているため、通常どおりに try-catch を使用できます。汚いらしいけど。catch
try{
}catch(Exception $exc){}
try-catch
EDIT2:
明確にするために、私はどのエラーが発生しているのか、またはそれを修正する方法を理解しようとはしていません-それが何であるか、およびそれを修正する方法はすでに知っています。しかし、記録のために、私が得ているエラーはここSQL0811
で定義されているものです。私が理解しようとしているのは、によって生成された E_WARNING を検出して適切に処理する方法です。db2_fetch_assoc()
. 理由は、私がそれを検出しない場合、最初の影響を受けたレコードでフェッチ プロセスがプリエンプティブに終了するためですが、ページはすべてが正常であるかのようにレンダリングされるためです。したがって、将来的には、何かが正しく機能していないことに数か月後に気付くのではなく、これらの状況を検出するためのセーフガードを用意したいと考えています. 残念ながら、最初の編集で投稿した小さな解決策は実行可能な解決策ではありません。実際に報告されるのは、フェッチの失敗があったことだけです。その失敗の原因については何も報告されていません。それは何かですが、それほど多くはありません。理想的には、SQL 状態コードなどを取得する方法があると思います (私のエラーの場合、上記のリンクで定義されている SQL0811、-811、21000 のいずれかになります)。
さらに、PHP で SQL エラーが E_WARNING としか見なされない理由がわかりません。私にはちょっと奇妙に思えますが、iNavigator でも同じ動作が得られます (つまり、問題のある行に到達したときにのみ停止します) が、緑色の画面ではありません (代わりに、クエリの実行時にエラーがスローされます)。したがって、DB ドライバーとその処理方法に関係があるはずです。
sql - DB2 の UNNEST 関数がエラーをスローしている
私はDB2データベースに取り組んでおり、TOADを使用して以下のステートメントを実行しています。STRINGARRAY は既に MYSCHEMA に Arraytype として作成されています。
このステートメントは、「SQL0104N 予期しないトークン "UNNEST" が ..... の後に見つかりました」というエラーをスローしています。
私の実際の意図は、where 条件の IN 句で arraylist を渡すことです。UNNEST 関数の使用をテストするために、この select ステートメントを試しています。
私の最終的なクエリは次のようになります。
どうすればこの仕事を手に入れることができるかアドバイスしてください。前もって感謝します!!