Pro c oracle проблема - вызов выполнен, но без вставки (ORACLE / PL SQL) - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь сделать процедуру в oracle с PL / SQL. Этот профессионал c должен вызвать функцию с возвращаемым значением, а затем обновить цвет с этим значением. Мой pro c выполняется нормально, но прошивка pro c не работает. Я немного потерян.

Профи c:

PROCEDURE depot_enrichment(babas number) IS
-- Curseur
CURSOR V_CURS_CDIS_CTC IS SELECT DISTINCT CD_REGATE,
                                 OPT_SITE_DEPOT,
                                 TYP_PARUTION_DECLA,
                                 NUM_PUBLICATION_DECLA,
                                 CD_POSTAL,
                                 ID_LIB_PREP 
                         FROM DEPOT_IMPORT 
                         WHERE OPT_SITE_DEPOT = 81001210 OR OPT_SITE_DEPOT = 81001211;
-- Variables proc
p_opt_site varchar2(40); -- DepotCDIS/DepotCTC
-- Variables parameters function
v_CodeSiteDepot VARCHAR2(40);   ----- 531980    
v_OptionSiteDepot VARCHAR2(40); ----  81001210/81001211
v_TypeParution VARCHAR2(40);   ----   N1, N2, N3 ..........
v_NoPublication VARCHAR2(40);----    1222K82523
v_codePostal VARCHAR2(40); -----     55000
v_NiveauPrepa VARCHAR2(40); ----      50001,50002,5003
-- Libelle parameters function    
v_LibOptionSiteDepot VARCHAR2(40); ----  DepotCDIS/DepotCTC
v_LibTypeParution VARCHAR2(40); ---- NUM , FCS ..........
v_LibNiveauPrepa VARCHAR2(40); ----      ATTF, LATD, LDCP, LDQL ou PEM
BEGIN  
-----------------------------------------------------------------------------------------------------
-- SUB-PROC OPT SIT DEPOT ENRICHIMENT - ENR4 :détermination de OptionSiteDepot pour les produits Presse
-- Enrichment of the opt_site_depot - JIRA : 1003
-----------------------------------------------------------------------------------------------------
-- option DepotCDIS / CTC 
OPEN V_CURS_CDIS_CTC;
LOOP 
  fetch V_CURS_CDIS_CTC into v_CodeSiteDepot,v_OptionSiteDepot,v_TypeParution,v_NoPublication,v_codePostal,v_NiveauPrepa;
  EXIT WHEN V_CURS_CDIS_CTC%notfound;

    Insert into babas values ('Parametres : ' || v_CodeSiteDepot || ' / ' || v_OptionSiteDepot || ' / ' || v_TypeParution || ' / ' || v_NoPublication || ' / ' || v_codePostal || ' / ' || v_NiveauPrepa);

    -- GET LIBELLE FROM PARAMETERS VARIABLES
    SELECT LIB.LIB_LIBELLE INTO v_LibOptionSiteDepot FROM LIBELLE LIB WHERE typ_libelle = 'OSD' and id_libelle = v_CodeSiteDepot;
    SELECT TYP.LIB_PARUTION INTO v_LibTypeParution FROM TYPE_PARUTION TYP WHERE id_type_parution = v_TypeParution;
    SELECT LIB.VAL_LIBELLE INTO v_LibNiveauPrepa FROM LIBELLE LIB WHERE typ_libelle = 'PEC' and id_libelle = v_NiveauPrepa;

    Insert into babas values ('Parametres libelles: ' || v_CodeSiteDepot || ' / ' || v_LibOptionSiteDepot || ' / ' || v_LibTypeParution || ' / ' || v_NoPublication || ' / ' || v_codePostal || ' / ' || v_LibNiveauPrepa);
  -- CALL FUNCTION
    p_opt_site := return_option_CDIS_CTC(v_CodeSiteDepot,v_LibOptionSiteDepot,v_LibTypeParution,v_NoPublication,v_codePostal,v_LibNiveauPrepa);
    Insert into babas values ('option site dépot : ' || p_opt_site);
  -- UPDATE ROWS
  UPDATE DEPOT_IMPORT SET OPT_SITE_DEPOT = p_opt_site;  
END LOOP;
CLOSE V_CURS_CDIS_CTC;  

END depot_enrichment;

Когда я вызываю профи c:

enter image description here

что вставлено в таблицу babas:

enter image description here

У меня сложилось впечатление, что код модификации в libelle (3 select) не работает, я пробую запрос в одиночку, и он возвращает мне правильное значение. Я не понимаю, если у вас есть какие-либо документы или советы, будет действительно круто :)

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

В l oop есть 3 insert into babas операторов, но - согласно полученному выводу, только первый:

Insert into babas values ('Parametres : ' ...

делает свою работу. Где остальные два?


При вызове процедуры вы указали имя владельца:

call sagapec_import.depot_enrichment(0);
     --------------
     this

Является ли таблица babas владельцем этого пользователя? Вы подключены как sagapec_import? Потому что, может быть, вы выполняете процедуру в одной схеме и проверяете результат в другой.


Наконец, это:

UPDATE DEPOT_IMPORT SET OPT_SITE_DEPOT = p_opt_site;  

не содержит предложение WHERE, что означает, что вы будете каждый раз обновлять все строки в этой таблице. Это правильно?

0 голосов
/ 30 марта 2020

Commit необходимо поместить в конце процедуры для отражения изменений.

....
....
 UPDATE DEPOT_IMPORT SET OPT_SITE_DEPOT = p_opt_site;  
END LOOP;
COMMIT; -- this is needed here
CLOSE V_CURS_CDIS_CTC;  
...