お世話になっております。
PL/pgSQLでPostgreSQLのあるテーブルにinsertがかかったら、別のテーブルをtriggerを使ってupdateする構文を書いていますが、上手くいきません。
insertを実行すると、変数が割り当てられていない旨が表示されます。
サンプルは以下の通り
DROP FUNCTION k_trig();

CREATE FUNCTION k_trig() RETURNS OPAQUE AS'
DECLARE
ov1 RECORD;
ov2 RECORD;
BEGIN
SELECT * FROM 個別集計 INTO ov1 WHERE id = new.id;
UPDATE 個別集計 SET a1 = ov1.a1 + new.a1, a2 = ov1.a2 + new.a2, a3 = ov1.c + new.a3 WHERE id = new.id;
*****以下省略
insert実行

「record ov1 is unassigned yet」と表示されます。
declareで宣言しているのですが・・・

何が原因か教えてください

A 回答 (1件)

>SELECT * FROM 個別集計 INTO ov1 WHERE id = new.id;


>UPDATE 個別集計 SET a1 = ov1.a1 + new.a1, a2 = ov1.a2 + new.a2, a3 = ov1.c + new.a3 WHERE id = new.id;

個別集計TBLのデータに新規登録した値を加えるという処理を行いたいんですよね。それでしたら、下記のように1つのUPDATE文で実行可能ではないでしょうか?

UPDATE 個別集計 SET a1 = a1 + new.a1, a2 = a2 + new.a2, a3 = c + new.a3 WHERE id = new.id;

PL/SQL(Oracle8)の使用経験しかありませんので、なぜレコードが空なのかわかりませんが、今回の件についてはこれで解決するのではないでしょうか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qfmlのconfig.phで使う、q{~};やq#~#;q%~%;は全て同じ意味?

メーリングリストのカスタマイズをしていて、ネット上で情報を集めているのですがどうしても分からないところがあります。 fml 4.0
$SMTP_OPEN_HOOKなどのHOOKを行うときに、q{~};やq#~#;q%~%を同じサイトであっても使い分けているようで、SMTP_OPEN_HOOKの時には =q{~}; を、START_HOOKでは =q#~#; のようになっています。
プログラムというもの自体触ったことはないのですが、一応記号が変わっているだけで中身は同じなのかなと思っています。
実際のところ別物でしょうか?

fmlとqで検索をかけても情報が引っかかりませんし、fmlとq#などとしてもfmlでしか検索できないみたいで八方ふさがりです。
よろしくお願いします。

Aベストアンサー

fmlはPerlという言語で書かれています。これはPerlの記法の問題です。
どれも意味は同じです。違うのは、
・囲まれた内部で使われて無い記号を使って囲むため
・書いた人が違う
・気分によって使い分け?

QC# String str = @”test”;の@の意味

C#でStringに文字列を代入する際に
String str = @”TEST”;
などと「@」をつけているコードがWeb上にありますが
@の意味はなんですか?また@以外で似たような
記号があれば教えてください。

Aベストアンサー

@"~" で「逐語的リテラル文字列」というらしい.

参考URL:http://msdn.microsoft.com/ja-jp/library/aa691090(VS.71).aspx

QVBAのプログラムで、DIAG = 1# / A(L, L) や R(

VBAのプログラムで、DIAG = 1# / A(L, L) や R(I) = 0# の数字1、0の後についている番号記号#は何を意味しているものでしょうか?

http://www.index-press.co.jp/books/excel/excel-04.pdf

の記事内にあるプログラムで使用されていますが、解説がありません。
調べてみましたがシャープと読まないことぐらいしかわかりませんでした。

どうぞよろしくお願いします。

Aベストアンサー

Pdf拝見しました。
凄く読みづらいプログラムで、どうにか修正したい欲に
かられるわけですが。

ここでいう♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示すものだと思います。

言語が違いますが仕様が似てますので参考まで。
3-1 変数と定数
 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx
 …真ん中のほう:
 …VB .NET はリテラルのデータ型に応じて、以下のような表記をします(表 3-2)。
 …の明示的な記述方法の列

1♯ はDouble型の1ということになります。
基本的に、Dim i as Double と宣言すれば i はDouble型に決まって
いますので♯は要りませんが。

稀に Dim i as Variant(何でも型)と宣言したとき、i=1#とすると
Double型として明示代入ができます。
とはいえ、変数の中身が訳がわからなくなるので、こんな書き方は
通常はしません。
プログラム文中を判りやすく見せているだけだと思います。


とはいえ、このプログラムは読みづらいです。
変数、配列のインデクサ、ループカウンタなど殆どが英字2文字以下の
意味のない単語変数なので、可読性のよいプログラムクォリティとしては
よろしくないと思います。

Pdf拝見しました。
凄く読みづらいプログラムで、どうにか修正したい欲に
かられるわけですが。

ここでいう♯記号などは、「リテラル」というもので型を
暗黙に示すもので、#はDouble型を示すものだと思います。

言語が違いますが仕様が似てますので参考まで。
3-1 変数と定数
 http://msdn.microsoft.com/ja-jp/library/dd314343.aspx
 …真ん中のほう:
 …VB .NET はリテラルのデータ型に応じて、以下のような表記をします(表 3-2)。
 …の明示的な記述方法の列

1♯ はDouble型の1ということになります。...続きを読む

QwindowsのプロセスIDやスレッドIDの使い道

win32APIで取得したプロセスIDやスレッドIDの使い道について教えてください。
CreateProcessなどで取得したプロセスのハンドルやスレッドのハンドルはwin32APIで使う場面がありますが、プロセスIDやスレッドIDの使い道がわかりません。
どのような場面でプロセスIDやスレッドIDを使うのでしょうか?具体的にこんな事をするときに使うよなどあれば教えていただきたいです。
プロセスIDやスレッドIDを引数にとるAPI関数などがあれば教えていただきたいです。

Aベストアンサー

・プロセスID

「他のプロセスが使用しているメモリにアクセスする場合」に必要です。

・スレッドID

1つのプロセスで複数のスレッドが実行される可能性があるので、プロセスIDだけでは足りません。スレッドを識別する為のスレッドIDが必要です。

>どのような場面でプロセスIDやスレッドIDを使うのでしょうか?

各プロセスで実行中のスレッドの優先順位を、別プロセスから変更する場合には、プロセスIDやスレッドIDが必要です。

他に「デバッガ」と呼ばれるアプリで「他のプロセスを操作する場合」にも使われます。

QWHILE (CHKIMG(”A.bmp”)=FALSE)←この終了条件を2個にするには

タイトルの画像Aが画面上に2個あったらループを終了させたいです。
WHILE (CHKIMG(”A.bmp”)=FALSE)のこの部分をどう変えればよいのでしょう?

あとチェッキングの画像透過率の指定で色無視で形で判断というのは
白黒で判断ってことなんですか?

Aベストアンサー

>環境というのはどのような情報
前回の質問では最低限の情報として書いてましたよね  UWSC と
他に書くとすれば 使ってるosが何なのか
使用しているバージョンはいくつなのかといったようなことです
質問内容によっては pcの型番がそういった情報に該当することもあります

質問する方は当人の話ですから分かってて当たり前ですが
回答する側には こいつ何言ってんだ としか思いません

私の場合も前回は uwscと書かれていたので質問内容を確認・回答
今回はたまたまタイトルで前回と同じ人とすぐ分かったので回答しただけの話であって
今回のようなタイトルでいきなり前触れなく質問があったらきっと相手にしないでしょう


人気Q&Aランキング

おすすめ情報