2016-06-13 153 views
-1

我有三個表,就像這樣:如何調試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中的jumlah與表data_kembali中的no_transaksi與data_pinjam相同,並將更新表data_buku中的庫存。每行具有相同的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

「query has no destination for result data」似乎是一個明確的錯誤消息。通常,提供一個額外的'AS '工作。 – Evert

回答

0

在遊標循環中SELECT語句需要選擇價值目標:

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

變量CURRENT_STOK也需要申報(在BEGIN之前)。

但也許遊標for循環的意圖是這樣嗎?

UPDATE data_buku 
    SET STOCK = STOCK + r.jumlah 
    WHERE kode_buku = r.kode_buku; 
相關問題