Je suis assez nouveau pour PL/SQL et j'ai de la difficulté à le faire fonctionner. J'essaye de passer le vendor_site_id à deux endroits en utilisant mon curseur. (Finalement, la liste sera plus, juste essayer de Dev avec 2 ID)Tentative de mise à jour des champs flexibles Oracle Site fournisseur. Le curseur ne fonctionne pas
Le code a été obtenu à partir d'Oracle, mais nous essayons de transmettre une mise à jour de masse pour ces flexfields.
Ici, il est:
SET SERVEROUTPUT ON
DECLARE
lc_return_status VARCHAR2(2000);
ln_msg_count NUMBER;
ll_msg_data LONG;
Ln_Vendor_Id NUMBER;
Ln_Vendor_site_Id NUMBER;
ln_message_int NUMBER;
Ln_Party_Id NUMBER;
lrec_vendor_site_rec ap_vendor_pub_pkg.r_vendor_site_rec_type;
CURSOR cVendorSite
IS
SELECT VENDOR_SITE_ID
FROM ap_supplier_SITES_ALL
where vendor_site_id IN ('1631833', '1630833');
BEGIN
FOR rVendorSite IN cVendorSite
LOOP
Ln_Vendor_site_Id := rVendorSite.vendor_site_id;
Lrec_Vendor_site_Rec.vendor_site_id := rVendorSite.vendor_site_id;
Lrec_Vendor_site_Rec.ATTRIBUTE1 := 'Yes';
AP_VENDOR_PUB_PKG.Update_Vendor_Site_public (p_api_version => 1,--
x_return_status => lc_return_status, --
x_msg_count => ln_msg_count, --
x_msg_data => ll_msg_data, --
p_vendor_site_rec => Lrec_Vendor_site_Rec, --
p_Vendor_site_Id => Ln_Vendor_site_Id);
IF (lc_return_status <> 'S') THEN
IF ln_msg_count >= 1 THEN
FOR v_index IN 1..ln_msg_count
LOOP
fnd_msg_pub.get (p_msg_index => v_index, p_encoded => 'F', p_data => ll_msg_data, p_msg_index_out => ln_message_int);
Ll_Msg_Data := 'UPDATE_VENDOR_SITE '||SUBSTR(Ll_Msg_Data,1,3900);
dbms_output.put_line('Ll_Msg_Data - '||Ll_Msg_Data);
END LOOP;
End If;
END IF;
END LOOP --Cursor Loop
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('SQLERRM - '||SQLERRM);
END;
/
COMMIT;
EXIT;
Comment ça ne marche pas? Je vois la génération de SQL dynamique, mais ne le vois pas en cours d'exécution. –