2016-06-13 6 views
-1

私は、3台を持っている。このように:PostgreSQLのトリガエラーをデバッグする方法 "クエリに結果データの宛先がありません"?

data_bukuテーブル私の表からの

+----+----------+----------------+ 
| kode_buku | * | * | stock | 
+----+----------+----------------+ 
| 111  | * | * | 50 | 
| 222  | * | * | 50 | 
| 333  | * | * | 50 | 
| 444  | * | * | 50 | 
| 555  | * | * | 50 | 
| 666  | * | * | 50 | 
+----+-------+-----+----+--------+ 

data_pinjamテーブル

+---------------+----------------------------+ 
| no_transaksi | kode_buku | * | jumlah | 
+---------------+-------------+----+---------+ 
| 1    | 111   | * | 3  | 
| 1    | 222   | * | 2  | 
| 1    | 333   | * | 4  | 
+---------------+-------------+----+---------+ 

data_kembaliテーブル

+---------------+-----+----+---------+ 
| no_transaksi | * | * | status | 
+---------------+-----+----+---------+ 
| 1    | * | * | back | 
+---------------+-----+----+---------+ 

、私は関数を作成し、テーブルdata_kembaliでトリガーします。テーブルdata_kembaliにクエリを挿入する間、関数はテーブルdata_pinjamのno_transaksiがdata_pinjamと同じで、テーブルdata_bukuの在庫を更新するテーブルdata_pinjamのjumlahを合計するアクションを行います。各行は同じkode_buku値を持ちます。株式+ Jumlah。

私は

CREATE OR REPLACE FUNCTION kembali() 
RETURNS TRIGGER AS 
$BODY$ 
DECLARE 
CURRENT_STOK INT4; 
r data_pinjam%ROWTYPE; 

BEGIN 

FOR r IN 
    SELECT * 
    FROM data_pinjam p 
    WHERE p.no_transaksi = new.no_transaksi 
LOOP 
    select CURRENT_STOK stock from data_buku where kode_buku = r.kode_buku; 
    CURRENT_STOK = CURRENT_STOK + r.jumlah; 
    UPDATE data_buku SET STOCK = CURRENT_STOK WHERE kode_buku = r.kode_buku; 
END LOOP; 

UPDATE data_pinjam SET status = 'kembali' WHERE no_transaksi = new.no_transaksi; 

update data_transaksi set status = 'kembali' where no_transaksi = new.no_transaksi; 

RETURN NEW; 
END; 
$BODY$ 
LANGUAGE PLPGSQL VOLATILE 
COST 100; 

関数を作成しますが、実行中にいる、出力

ERROR: query has no destination for result data 
SQL state: 42601 
Hint: If you want to discard the results of a SELECT, use PERFORM instead. 
Context: PL/pgSQL function kembali() line 13 at SQL statement 

は、誰かがループで更新のため、このトリガーおよび機能については私に助言することができますか?カーソルループで

+0

"クエリには結果データがありません"というエラーメッセージが表示されます。しばしば、追加の 'AS 'を提供します。 – Evert

答えて

0

SELECT文は、選択した値の保存先を必要とします。

SELECT stock 
    INTO CURRENT_STOK 
    FROM data_buku 
    WHERE kode_buku = r.kode_buku; 

変数CURRENT_STOKも(BEGIN前に)宣言する必要があります。

しかし、おそらくカーソルのループの目的はこれですか?

UPDATE data_buku 
    SET STOCK = STOCK + r.jumlah 
    WHERE kode_buku = r.kode_buku; 
関連する問題