不熟悉 PL SQL,需要有关更新游标和 2 个表的帮助



这是我的代码!我想更新从 11-01-01 开始的订单的端口费用,但我还需要另一个表中的条件。我需要知道我的客户是否来自加拿大。如果他们来自加拿大,费用会下降 0.5,如果它在加拿大境外,费用会上涨 0.10,但由于国家/地区类型,它不起作用,因为它来自另一个表,我似乎无法声明国家。因此,我想帮助了解如何使用我们的无光标更新费用。谢谢!:)


DECLARE
P_PAYS CLIENTS.PAYS%TYPE;
P_PORT COMMANDES.PORT%TYPE;
AUGMENTATION NUMBER;
CURSOR CURSEUR IS
SELECT A.CODE_CLIENT,NO_COMMANDE,NO_EMPLOYE,DATE_COMMANDE,PORT,PAYS
FROM CLIENTS A 
join COMMANDES B
ON B.CODE_CLIENT = A.CODE_CLIENT
WHERE DATE_COMMANDE > '11-01-01'
FOR UPDATE;  

BEGIN
FOR CLIENTS IN CURSEUR LOOP
IF CLIENTS.P_PAYS = 'Canada' THEN
AUGMENTATION := -.05; 
ELSE 
AUGMENTATION := .10;
END IF;
UPDATE CLIENTS
SET  PORT = PORT + (PORT * AUGMENTATION)
WHERE CURRENT OF CURSEUR;    
END LOOP;
END;

不需要额外的标识符(augmentation)。将FOR CLIENTS IN CURSEURFOR c IN curseur交换为clients是表而不是游标,然后使用以下语句以及删除当前if条件语句

DECLARE
CURSOR curseur IS
SELECT cl.code_client,
no_commande,
no_employe,
date_commande,
port,
pays
FROM clients cl
JOIN commandes co
ON co.code_client = cl.code_client
WHERE date_commande > date'2011-01-01'
FOR UPDATE;
BEGIN
FOR c IN curseur LOOP
UPDATE clients
SET port = ROUND(port * CASE WHEN c.pays = 'Canada' THEN .95 ELSE 1.1 END,2)
WHERE code_client = c.code_client;
END LOOP;
END;
/

最新更新