2014-10-14 20 views
8

Próbuję utworzyć procedurę składowaną, która zażąda pewnych danych XML z usługi. Znalazłem kilka przykładów on-line i wszystkie z nich wskazują na użycie tego pakietu UTL_HTTP. Jednak za każdym razem starałem się skompilować mój sklep procedury z tym pojawia się błąd:Błąd procedury składowanej PLS-00201: identyfikator "UTL_HTTP" musi zostać zadeklarowany

PLS-00201: identifier 'UTL_HTTP' must be declared 

Oto podstawowy szkielet kodu chcę użyć.

PROCEDURE GET_XML_DATA2 AS 

BEGIN 
    DECLARE 
    v_soap_request VARCHAR2(32767); 
    v_soap_response VARCHAR2(32767); 

    v_http_request UTL_HTTP.req; --Fails here 
    v_http_response UTL_HTTP.resp; -- Fails here too 
    v_action   VARCHAR2(4000) := ''; 

BEGIN 

    null; 

END; 

END GET_XML_DATA2; 

Błąd we wskazanych liniach i nie jest kompilowany. Korzystam z wersji Oracle Express Edition i już próbowałem nadać moim użytkownikom uprawnienia do wykonywania tego pakietu. Nie działało. Na co jeszcze mogę patrzeć? Co jeszcze może być przyczyną tego? Dzięki!

Odpowiedz

12

Jak już się zorientowaliście, wydaje się, że jest to problem z uprawnieniami. Twój użytkownik w jakiś sposób nie ma dostępu do pakietu UTL_HTTP. Upewnij się, że użytkownik ma uprawnienie EXECUTE na pakiecie:

GRANT EXECUTE ON SYS.UTL_HTTP TO my_user; 

Pamiętaj, że możesz to zrobić jako SYS.

Używając programisty SQL (który mogę polecić, jeśli robisz rozwój PL/SQL), sprawdź, czy możesz jakoś spojrzeć na pakiet. Jeśli to nie pomoże, opublikuj uprawnienia, które aktualnie posiada Twój użytkownik.

+0

Dzięki za odpowiedź! Nie mogłem (nadal nie mogę) zalogować się jako SYS. Próbowałem zalogować się jako SYSTEM i wykonałem polecenie GRANT EXECUTE ON SYS.UTL_HTTP TO my_user. To nie zadziałało i dało mi ten błąd: Błąd zaczynający się od wiersza 1 w poleceniu: ZGODA NA WYKONANIU NA SYS.UTL_HTTP DO ZAINSTALOWANIA Raport o błędzie: Błąd SQL: ORA-00942: tabela lub widok nie istnieje 00942. 00000 - "tabela lub widok nie istnieje" –

+0

Co oznacza "SELECT * FROM dba_objects WHERE nazwa_obiektu = 'UTL_HTTP'' return? Chociaż myślę, że UTL_HTTP powinien istnieć w twojej bazie danych ... Może nie jest dostępny w XE? –

Powiązane problemy