C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

全過去ログを検索

<< 0 >>
■57403  DATEDIFF関数について
□投稿者/ がながな -(2011/02/25(Fri) 11:01:03)

    分類:[.NET 全般] 

    おはようございます。
    SQL文について質問させていただきたいのですが、

    例えば
    2011/2/1 10:00〜2011/2/2 10:40
    Start Last
    の差は何時間かを計算したいです。
    24時間40分=24.66時間と計算できるようにしたいのですが
    datediff(hour,start,last)+(datediff(minute,start,last))/60
    とした場合、小数点以下がなくなってしまいます。
    どのようにすればいいでしょうか?
親記事 /過去ログ96より / 関連記事表示
削除チェック/

■85992  PL/SQLでデータが無いのにデータが返却される
□投稿者/ k3user -(2017/12/07(Thu) 15:16:53)

    分類:[データベース全般] 

    PL/SQLにて不可解な現象に悩まされています。
    以下のようなテーブルとPL/SQLがあり
    TEST_TABLEを外部から指定したパラメータで検索し、
    データの有無でInsert処理を行っているのですが、
    SELECTの部分でデータが無いにもかかわらず(何度もパラメータは確認しました。)
    データが取得されていまいエラー処理に走ってしまいます。
    「ROWVERSION」という項目名を疑ってみたのですが、関係は無いはずです。
    何かまずい部分があるのでしょうか...

    補足事項
    ・SQLを直接実行するとデータはない
    ・実行の度にROWVERSIONの値がインクリメントされている。(テーブル内に存在しない値)
    ・使用しているバージョンはORACLE12C

    TEST_TABLEの定義

    KONYUBMNCD CHAR(3) NOT NULL,
    GYOSYACD CHAR(6) NOT NULL,
    KOJINO CHAR(8) NOT NULL,
    KEIYAKUKIKANSTR CHAR(8) NOT NULL,
    TankaCd CHAR(3) DEFAULT ' ',
    ROWVERSION NUMBER(38,0) DEFAULT 0,


    PL/SQL処理抜粋

    wvExists INTEGER;
    wvNewRowversion NUMBER;

    wvExists := 1;
    wvNewRowversion := NULL;

    BEGIN
    SELECT ROWVERSION
    INTO wvNewRowversion
    FROM ItakuTankaMst
    WHERE KonyuBmnCd = パラメータ1
    AND GyosyaCd = パラメータ2
    AND KojiNo = パラメータ3
    AND KeiyakuKikanStr = パラメータ4
    AND TankaCd = パラメータ5
    FOR UPDATE NOWAIT
    ;
    EXCEPTION
    WHEN NO_DATA_FOUND THEN
    wvExists := 0;
    END;

    IF wvExists = 1 THEN
    prErrMsg := '他のユーザーより登録されました。処理を中止します。' ;
    RAISE ERR_EXCLUSIVE;
    ELSE
    テストテーブルのinsert処理
    END IF;
親記事 /過去ログ147より / 関連記事表示
削除チェック/

■85994  Re[1]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ furu -(2017/12/07(Thu) 16:29:02)
    No85992 (k3user さん) に返信
    > 「ROWVERSION」という項目名を疑ってみたのですが、関係は無いはずです。

    ORACLEには「ROWVERSION」というものは無いようですが
    「ROWVERSION」は何なんですか?

    これを他のに変えても駄目ですか?

記事No.85992 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85993  Re[1]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ 魔界の仮面弁士 -(2017/12/07(Thu) 16:26:22)
    2017/12/07(Thu) 16:26:53 編集(投稿者)

    No85992 (k3user さん) に返信
    > SELECTの部分でデータが無いにもかかわらず(何度もパラメータは確認しました。)
    > データが取得されていまいエラー処理に走ってしまいます。

    過去、似たような質問があった際には、
     (1) 接続先サーバーが間違っていた
     (2) データベース側のバグによるもので、パッチ適用で改善した
    というものがありました。念のため、上記を疑ってみてください。


    > ・SQLを直接実行するとデータはない
    同一トランザクション内で確認されていますか?


    > ・実行の度にROWVERSIONの値がインクリメントされている。(テーブル内に存在しない値)
    テーブル内に存在しないということは、擬似列でしょうか。

    その値が増加するというということは、その直前の何か(たとえばトリガー)によって、
    更新処理が行われているという可能性はありませんか?

    とはいえ、12c で ROWVERSION という名前は聞いたことが無いですね…。
    (SQL Server ならばありますが)
    Oracle なら ROWID というものがありますが、あれはインクリメントという感じではないですし。

    https://technet.microsoft.com/ja-jp/library/ms182776.aspx
    https://www.shift-the-oracle.com/sql/column/rowid.html
記事No.85992 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85995  Re[2]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ k3user -(2017/12/07(Thu) 17:56:27)
    魔界の仮面弁士さん

    返信ありがとうございます。

    > (1) 接続先サーバーが間違っていた
    現在、同一構成のサーバが複数あるので、念のため
    TEST_TABLEの名前を変えて(TEST_TABLE2という名前に変更して指定の接続先サーバしか存在しない)ためしてみました。

    >その値が増加するというということは、その直前の何か(たとえばトリガー)によって、
    >更新処理が行われているという可能性はありませんか?
    これの可能性が高いので、現在ソースコードを調査中です。
    ですが、テーブル名称自体を変更したので、別の処理で更新処理がされているということは無いと思います。

    >とはいえ、12c で ROWVERSION という名前は聞いたことが無いですね…。
    「ROWVERSION」という名前に特に意味はなく排他制御フラグ的な意味合いで使用しています。
    「ROWVERSION」という名前がだめかも知れないと思い念のため別名にしてみましたが、だめでした。

記事No.85992 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85997  Re[3]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ 魔界の仮面弁士 -(2017/12/07(Thu) 18:05:11)
    2017/12/07(Thu) 18:05:53 編集(投稿者)

    No85995 (k3user さん) に返信
    > 「ROWVERSION」という名前に特に意味はなく排他制御フラグ的な意味合いで使用しています。

    ん?これって物理列ですか?それともパラメーター?

    物理列なのであれば、該当テーブルに FOR EACH ROW 指定なトリガーを
    仕掛けておき、更新履歴を別テーブルに残して追跡してみるとか。
    https://www.shift-the-oracle.com/trigger/dml-trigger.html
記事No.85992 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85996  Re[3]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ k3user -(2017/12/07(Thu) 17:59:47)
    furuさん
    返信ありがとうございます。


    >ORACLEには「ROWVERSION」というものは無いようですが
    >「ROWVERSION」は何なんですか?
    「ROWVERSION」という名前に特に意味はなく役割としては排他制御フラグとして使用しています。

    ・select時にROWVERSIONを取得
    ・更新時にROWVERSIONを比較して異なればエラー


    >これを他のに変えても駄目ですか?

    該当のテーブルを「TEST_TABLE」から「TEST_TABLE2」に変更し
    さらに「ROWVERSION」を「HAITAFLG」に変更して試してみたのですが、
    結果は同じでした。



記事No.85992 のレス /過去ログ147より / 関連記事表示
削除チェック/

■85998  Re[4]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ k3user -(2017/12/07(Thu) 18:25:24)
    魔界の仮面弁士さん
    申し訳ございません。説明が不足していました。
    物理列です。実際は以下の定義です。
    
    CREATE TABLE JS01.TEST_TABLE2
    (
        KONYUBMNCD                     CHAR(3) NOT NULL,
        GYOSYACD                       CHAR(6) NOT NULL,
        KOJINO                         CHAR(8) NOT NULL,
        KEIYAKUKIKANSTR                CHAR(8) NOT NULL,
        KEIYAKUKIKANEND                CHAR(8) DEFAULT ' ',
        SYOTEINAIJIKAN                 NUMBER(3,2) DEFAULT 0,
        TANKACD                        CHAR(3) NOT NULL,
        ITAKUKINMUCD                   CHAR(1) DEFAULT ' ',
        ITAKUSYOKUSYUCD                CHAR(2) DEFAULT ' ',
        JIKANTANKA                     NUMBER(5,0) DEFAULT 0,
        ADDYMD                         CHAR(8) DEFAULT ' ',
        ADDTIME                        CHAR(8) DEFAULT ' ',
        ADDTANCD                       CHAR(6) DEFAULT ' ',
        UPDYMD                         CHAR(8) DEFAULT ' ',
        UPDTIME                        CHAR(8) DEFAULT ' ',
        UPDTANCD                       CHAR(6) DEFAULT ' ',
        UPDPGID                        CHAR(8) DEFAULT ' ',
        HAITAFLG                       NUMBER(38,0) DEFAULT 0,
        CONSTRAINT TEST_TABLE2_IX1 PRIMARY KEY (KONYUBMNCD, GYOSYACD, KOJINO, KEIYAKUKIKANSTR, TANKACD) USING INDEX
            PCTFREE 10
            INITRANS 2
            MAXTRANS 255
            TABLESPACE JS01IND_02
            STORAGE(INITIAL 328K NEXT 328K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT)
            LOGGING
    )
    PCTFREE 10
    MAXTRANS 255
    TABLESPACE JS01_02
    STORAGE(INITIAL 472K NEXT 472K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 BUFFER_POOL DEFAULT)
    NOCACHE
    LOGGING
    /
    COMMENT ON TABLE JS01.TEST_TABLE2 IS 'テスト用テーブル2'
    /
    
記事No.85992 のレス /過去ログ147より / 関連記事表示
削除チェック/

■86000  Re[5]: PL/SQLでデータが無いのにデータが返却される
□投稿者/ k3user -(2017/12/07(Thu) 19:10:37)
    回答を頂いた皆様

    詳しく調査した所、PL/SQL内のプログラムで問題があることがわかりました。
    掲載したプログラム以外の部分でループと条件分岐に不備がありました。
    試しにループと条件分岐を変更した所、問題なく処理が行われました。

    この度はご迷惑をおかけしてしまい誠に申し訳ございませんでした。


記事No.85992 のレス / END /過去ログ147より / 関連記事表示
削除チェック/

■100892  Re[3]: ファイルシステムのディレクトリpathの指定方法について
□投稿者/ HattariB -(2022/11/16(Wed) 20:47:49)
記事No.100874 のレス /過去ログ176より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -