2014-10-14 27 views
8

Tôi đang cố gắng tạo một thủ tục được lưu trữ yêu cầu một số dữ liệu XML từ một dịch vụ. Tôi đã tìm thấy một số ví dụ trên mạng và tất cả đều hướng đến việc sử dụng gói UTL_HTTP này. Tuy nhiên, mỗi khi tôi cố gắng biên dịch quy trình lưu trữ của mình với lỗi tôi nhận được:Lỗi quy trình được lưu trữ PLS-00201: mã định danh 'UTL_HTTP' phải được khai báo

PLS-00201: identifier 'UTL_HTTP' must be declared 

Đây là bộ xương cơ bản của mã tôi muốn sử dụng.

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; 

Không thành công trong các dòng được chỉ định và không biên dịch. Tôi đang sử dụng Oracle Express Edition và tôi đã cố gắng cấp cho người dùng quyền thực thi gói đó. Nó không hoạt động. Tôi có thể xem xét điều gì khác? Điều gì khác có thể gây ra điều này? Cảm ơn!

Trả lời

12

Như bạn đã tự tìm ra, điều này có vẻ là vấn đề về quyền. Người dùng của bạn bằng cách nào đó không có quyền truy cập vào gói UTL_HTTP. Đảm bảo người dùng của bạn có quyền EXECUTE trên gói:

GRANT EXECUTE ON SYS.UTL_HTTP TO my_user; 

Lưu ý rằng bạn có thể phải thực hiện điều này dưới dạng SYS.

Sử dụng SQL Developer (mà tôi có thể đề xuất nếu bạn đang phát triển PL/SQL), xem liệu bạn có thể xem gói bằng cách nào đó không. Nếu điều đó không có tác dụng, vui lòng đăng các quyền mà người dùng của bạn hiện có.

+0

Cảm ơn bạn đã phản hồi! Tôi không thể (vẫn không thể) đăng nhập bằng SYS. Tôi đã thử đăng nhập như SYSTEM và thực hiện lệnh GRANT EXECUTE ON SYS.UTL_HTTP TO my_user. Nó không hoạt động và đã cho tôi lỗi này: Lỗi bắt đầu tại dòng 1 trong lệnh: THỰC HIỆN GRANT TRÊN SYS.UTL_HTTP ĐẾN spotfire Báo cáo lỗi: Lỗi SQL: ORA-00942: bảng hoặc chế độ xem không tồn tại 00942. 00000 - "bảng hoặc khung nhìn không tồn tại" –

+0

'SELECT * FROM dba_objects WHERE object_name = 'UTL_HTTP'' trở lại là gì? Mặc dù tôi nghĩ rằng UTL_HTTP nên tồn tại trong cơ sở dữ liệu của bạn ... Có lẽ nó không có sẵn trong XE? –

Các vấn đề liên quan