• ベストアンサー

v$sysstatの値がオーバーフロー

Windows版Oracle 9iでv$sysstatをチェックしたいら table fetch by rowid が 1.123456789E+10 という指数形式になって整数でなくなったのですが、これはOracleを再起動しないと元の整数値表示には戻らないのでしょうか? 要は10桁・99億を越したことが原因なのですが、桁数を増やすとか、100億を越さない前に値をリセットするなどの方法があればと思っています。

  • Oracle
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.2

こんにちわ。 > 桁数を増やすとか、・・・ v$sysstat をSelect する前に、以下の何れかを実行して下さい。 SQL> col value format 999999999999999 又は、 SQL> set numwidth 15

gtx456gtx
質問者

お礼

ありがとうございます。 >v$sysstat をSelect する前に >col value format 999999999999999 >set numwidth 15 本日、問題のサーバの操作できませんが早速試してみます。

gtx456gtx
質問者

補足

本日、問題のサーバで無事オーバフローせずに表示できました。 ありがとうございます m(_ _)m

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

v$sysstatの「value」は「NUMBER」ですから「NUMBER(38)」を意味します。 確信はありませんが、TO_CHARで十分な桁数を指定して表示することを試してみてください。

gtx456gtx
質問者

お礼

何時もアドバイスありがとうございます。 >「NUMBER」ですから「NUMBER(38)」を意味します。 >TO_CHARで十分な桁数を指定して表示 本日、問題のサーバの操作できませんが早速試してみます。

gtx456gtx
質問者

補足

本日、問題のサーバで無事オーバフローせずに表示できました。 ありがとうございます m(_ _)m

関連するQ&A

  • Oracle9i  v$sysstatの解釈

    Windows版 Oracle 9iで、下記のSQLを実行した値で質問なのですが・・・ <<SQL>> Select name, value from V$SYSSTAT where name like 'table%'; <<SQL結果>> NAME VALUE ---------------------------------------------------------------- ---------- table scans (short tables) 41298 table scans (long tables) 171 table scans (rowid ranges) 0 table scans (cache partitions) 0 table scans (direct read) 0 table scan rows gotten 151275758 table scan blocks gotten 11959596 table fetch by rowid 23079146 table fetch continued row 1048 table lookup prefetch client count 0 Webで検索すると、 Full Scan率は「table scans (long tables) / ( table scans (short tables)+table scans (long tables) )」とあったり、 「table fetch by rowid < table scan rows gotten」は頻繁にFull Scanしている状態とあって、「table scan rows gotten」がFull Scanの行数に思えるですが、実測した下記の値からは違うように思えるのですが、どのように解釈すれば良いのでしょうか? table scans (short tables) 41298 table scans (long tables) 171 ---- table scan rows gotten 151275758 table fetch by rowid 23079146

  • ROWID型の宣言について(Pro*C)

    (Oracle9i) Pro*Cにて、ROWIDを使用したSELECT&INSERTをしたいのですが、 ホスト変数をROWID型で宣言しようとするとエラーになります。 [PCC-S-02201, 記号"rowid"が見つかりました。 次のうちの1つが入るとき~] 宣言の仕方は以下の通りです。  EXEC SQL BEGIN DECLARE SECTION;   rowid fetch_ROWID;   short fetch_ROWID_ind;  EXEC SQL END DECLARE SECTION; ROWIDという型はORACLEにあるので、なぜプリコンパイルが通らないのか 分かりません。 どなたかお分かりになる方がいらっしゃいましたらよろしくお願いいします。 ちなみに以下のような使い方をしようとしていますので、参考までに 載せておきます。  EXEC SQL DECLARE C_XXX CURSOR FOR   SELECT ・・・,ROWID FROM XXX FOR UPDATE ・・・  EXEC SQL OPEN C_XXX;  EXEC SQL WHENEVER NOT FOUND DO break;  while(1){   EXEC SQL FETCH C_XXX INTO    ・・・,    :fetch_ROWID:fetch_ROWID_ind;   EXEC SQL    UPDATE XXX    SET ・・・    WHERE ROWID=:fetch_ROWID:fetch_ROWID_ind;  }

  • 特定の値をチェックしたいのですが…

    VB2005、DB2環境です。 日付の値を取得する処理があるのですが、稀に通常ではあり得ない 値が入っていることがあります。 例えば、yyyymmdd形式にするべきところに、20070100だとか、 000000だとか、20007/001/01だとか。 パターンとしては、下二桁が00になっているもの、桁数が8桁より 多いもの、の2つがほとんどなのですが、このような値を取得した 場合は、2007/01/01としたいと思っています。 まず条件式を作らなければならないと思うのですが、この、下二桁は 0で他はランダムである値と、8桁より多い数というものは、どのように 判別させれば良いのでしょうか? 出来ましたら、サンプルコードを交えて教えていただけないでしょうか? よろしくお願いします。

  • オラクルのnumber

    オラクルデータのNumber型の(14,2)という場合、 最大桁数が14桁で小数点が2桁ということでしょうか? 小数点が2桁ある場合は、整数部分は12桁までしか入らないのでしょうか

  • ORA-01438について

    OracleのPL/SQLの作成で "ORA-01438: 指定した精度を超えた値が列に指定されています"の エラーメッセージが出てしまいます。 PL/SQL上で、値が整数2桁+少数2桁 となるところを計算式を修正し 整数4桁になるようにしたところ、ORA-01438が出るようになりました。 ちなみに全てselectのはずです。 該当のカラムは副問い合わせを介してテーブルから呼んでいるのですが、 大本のカラムには精度(桁数)指定はありません。 いったいこれは何の精度指定に引っ掛かっているのでしょうか。 考えられる可能性を提示して頂けると大変助かります。

  • SQLスクリプト内で、${変数}と記述しても値を認識できない?

    USER.TABLE_LNK_TRG.shにて、トリガ作成スクリプトUSER.TABLE_LNK_TRG.sqlをコンパイルしようとしています。 USER.TABLE_LNK_TRG.shとUSER.TABLE_LNK_TRG.sqlともに 変数ORACLE_SID_1の値としてdb1、 変数ORACLE_SID_2の値としてdb2 が入っているはずなのですが、USER.TABLE_LNK_TRG.sql内では ${ORACLE_SID_1}と${ORACLE_SID_2}がそのまま文字列として解釈され (変数の値であるdb1、db2にはならない)、コンパイルに失敗します。 逆にUSER.TABLE_LNK_TRG.sql内で、${ORACLE_SID_1}と${ORACLE_SID_2} を使わず、直接db1、db2と記述すると成功します。 トリガ作成スクリプトUSER.TABLE_LNK_TRG.sql内で、${変数}は使えないのでしょうか? 環境はOSはSolaris、DBはOracle9i、シェルはBシェルです。 _______________________________________________________________ ~USER.TABLE_LNK_TRG.sh~ #!/bin/sh ORACLE_SID_1="db1" ORACLE_SID_2="db2" #トリガコンパイル sqlplus aaa/aaa <<-EOF @USER.TABLE_LNK_TRG.sql quit EOF exit ______________________________________________________________ ~USER.TABLE_LNK_TRG.sql~ CREATE OR REPLACE TRIGGER USER.TABLE_LNK_TRG BEFORE UPDATE ON USER.TABLE FOR EACH ROW declare begin update TABLE@${ORACLE_SID_1}_lnk set col = :new.col; update TABLE@${ORACLE_SID_2}_lnk set col = :new.col; exception when others then null; end; / _______________________________________________________________ ※${ORACLE_SID_1}、${ORACLE_SID_2}のままコンパイルされるので、  ${ORACLE_SID_1}_lnkのDB環境、${ORACLE_SID_2}_lnkのDB環境が存在せずコンパイルエラー。  逆に直接db1、db2と記述するとdb1_lnkのDB環境、db2_lnkのDB環境が存在するので正常にコンパイル。

  • エクセルの表示形式で、10の桁で四捨五入した値を表示させるには?

    エクセルの表で、数字を四捨五入する方法にはROUND関数がありますが、関数で変換すると値そのものが変わってしまいます。 値はそのままで四捨五入した数字で表す方法を教えてください。 小数や一桁の整数までの四捨五入であれば、セルの書式設定・表示形式を「数値」にして小数点以下の桁数を指定してやれば簡単ですが、10の桁以上で丸めて表示させる方法を探しています。 例えば、9876→9880と表示させる書式設定の方法です。 値は計算に使うので、ROUND関数で実際に丸めたくないのです。 ユーザ定義を組み合わせるなどで、うまくできませんか?

  • エクセル(Excel)で、数値を一定の有効数字で表示したいのですが…

    エクセル(Excel)の書式設定の表示形式では数値を選択すると、小数点以下の桁数を揃えることができますが、同じ感覚で有効数字を一定にして表示させるにはどんな方法があるでしょうか? 例えば、0.01234、0.1234、1.1234、11.1234、111.1234という五つの値を、有効数字3桁を指定して表示して、順に0.0123、0.123、1.12、11.1、111という風に自動的に表示してくれる表示形式、あるいは関数を探しています。 事務計算で小数点以下何桁というのが重要であるように、技術計算ではこのように有効数字を揃えたい場合が多いと思いますので、どなたかご存じの方、お教えください。 なお、指数形式では似たような結果になりますが、わかりにくい表示なので使いたくありません。 よろしくお願いいたします。

  • オラクルでNUMBER型で少数点が.0の場合どうなる??

    お疲れ様です。 価格の定義が PRICE NUMBER(8,1) NOT NULL, --単価 となっている場合 整数部 7桁、少数部 1桁、桁数に小数点は含まない という意味となりますが、 その項目に 例えば、SQL Plusで 100.1を入力したら100.1と表示しますが、 100.0を入力したら100.0と表示せず、100と表示されます。 どうしてなのかがわかりません。 オラクルの仕様なのでしょうか? 宜しくお願いします。

  • C++でのdouble型データの精度

    こんにちは。 コンパイラは、Borland C++ Compiler 5.5 を使っています。 表題の「精度」とは、 正確な値が保証される、「整数部分の桁数」+「小数点以下の桁数」 の事です。 普通、double型データの「精度」は、16桁であると認識しています。 そのため、例えば、 a=123456789012345.6 という浮動小数点数は16桁なので、正しい値が保証されるはずです。 ところが、printf("%f", d1); のようにprintf関数で表示すると、 123456789012345.593800 と表示されました。 これは、d1が正しい値を保持できていないという事です そこで、桁数を下げていった所、 a=1234567890.1 つまり、精度は11桁しかないという事になります。 何か僕が勘違いしているのでしょうか? それとも、僕が使っているコンパイラの精度が11桁しかないという事なのでしょうか? 何かお分かりの方がいらっしゃれば、是非アドバイスを頂きたいと思います。 では、よろしくお願い致します。