-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
有人能告訴我有關該觸發器和功能與循環更新?
「query has no destination for result data」似乎是一個明確的錯誤消息。通常,提供一個額外的'AS'工作。 –
Evert