メインコンテンツへスキップ

PostgreSQLへのレコード追加時、採番された連番が取得できない

コメント

9件のコメント

  • つづら -太郎冠者


     登録リンク&レポート後イベントでデータ追加後


     登録リンク&レコード後イベントでデータ追加後(項目更新を利用)

    失礼しました。

  • Tanda

    つづら -太郎冠者さん、

    他のツールで確認できているとしたら、「画面再表示」か「ビュー再表示」で表示されませんか?

  • つづら -太郎冠者

    Tandaさん、リプライありがとうございます。
    上記ためしてみましたが、採番された筈の●●連番の値は、0のままでした。

    結局、いまのところ、以下2つの方法にたどり着きました。1つのタスク化できないのは残念ですが。

    方法1(元々思ってた回避策)
     タスクA:登録リンクを実施
     タスクB:メインテーブルを指定し、ユニークインデックスの列を範囲指定した結果(1件)の、●●連番を参照

    方法2(New!)
     タスクA:登録リンクを実施
     タスクB:SQLコマンドで"SELECT lastval();" 、出力パラメータに変数をセット

    あんまり直接SQLコマンドは書きたくないなーとおもっていたところ、
    上記のタスクBは、他のテーブルの場合でも使い回しができそうだし、
    ユニークインデックスで1件に絞れない場合もあるかもしれないので、
    以外にも重宝しそうな気がしております。
    現在、トランザクションのモードや開始はどうしたものかと試行中です。

  • つづら -太郎冠者

    ちょっとした上記の続きです。

    PostgreSQLで、登録リンクではなく書出リンクで、InsertもUpdateも共通で実装きたので、
    SQLServerに立ち戻って、同じように実装したところ、
    登録リンクの時と違って、タスク後で採番された●●連番の値が取得できなくなってました😢

    PostgreSQLで試した上記方法2のように、
    以下試しましたが、採番された値を取得することができませんでした。
     タスクA:書出リンクを実施
     タスクB:SQLコマンドで"SELECT SCOPE_IDENTITY();" 、出力パラメータに変数をセット

    結局、SQLServerの方は、
    登録リンク(Insert。タスク後で採番値を取得)と、書出リンクでなくてメインソースの更新(Update)と
    2つのサブタスクを使いわけて、DB処理用のサブルーチンPGを作ってしまいました。

    今回の件、相手DBの違いを、なかなかMagicも吸収し切れていないなと感じました。
    以上

  • Tera

    違ってたらごめんなさい。

    ひょっとして

    タスク後処理からコールした子タスク内でテーブルAをメインテーブルに定義するかリンク等で定義するかして●●連番の値を取得

    でなく

    タスク後処理でそのタスクのデータビューに定義してあるテーブルAの●●連番の値を取得

    をしようとしておられるのですか?

    だとしたら、タスク後ではテーブルAのレコードを既に手離しており掴んでないので取得できる値は保証できないと思われます。レコード後処理で変数に●●連番の値を更新し、タスク後処理ではその変数の値を使用するようにして下さい。

  • つづら -太郎冠者

    Teraさん、リプライありがとうございます。

    SQLServerDB操作時、確かに以下の様に実施しております。

     ・タスク内、登録リンクを指定、メインソースは未指定。
     ・レコード後処理で登録リンクの各列に値をセット。
     ・タスク後処理で登録リンクの列「担当者連番」(自動採番、プライマリキー)を、アウトのパラメータにセット

    上記でも、一時停止したりしてテストし、違う連番値は取得しなさげ…とは先週思っておりましたが、

    Teraさんのお言葉を受け、以下変更してみました。
     
     ・変数 V.自動採番された連番 を追加
     ・レコード後処理で V.自動採番された連番 に、登録リンクの列「担当者連番」の値をセット
     ・タスク後処理で V.自動採番された連番 の値を、アウトのパラメータにセット

    レコード後処理の中で、採番値が取得できると思っていなかった分、目からウロコでした。
    ありがとうございます。

  • Tera

    お役に立てたようで何よりです。

    その作りであれば 変数V.自動採番された値 を追加しなくても、レコード後処理で直接アウトパラメータに更新しても大丈夫ですよ。

  • つづら -太郎冠者

    そうですね。変数を介さずとも行けそうですね。

  • つづら -太郎冠者

    タスク後処理からレコード後処理に移動させたら、
    なぜかアウトパラメータに採番値が入らなくなりました。

    よって、元に戻しました。

サインインしてコメントを残してください。