2012-09-08 19 views
10

Tôi có một thủ tục được lưu trữ PL/SQL bên trong mà tôi muốn chạy một số cập nhật, sau đó nắm bắt bất kỳ trường hợp ngoại lệ nào và trả lại chúng một tham số ngoài. Để đơn giản vì lợi ích trong khối mã bên dưới, tôi chỉ đơn giản là xuất mã ngoại lệ và thông báo lỗi vào bàn điều khiển. Tuy nhiên, khối mã bên dưới không hoạt động (Tôi gặp phải lỗi cú pháp "tìm thấy/mong đợi")Cách bắt và trả lại (hoặc in) một ngoại lệ trong một ORACLE PL/SQL tạo hoặc thay thế thủ tục lưu sẵn

CREATE OR REPLACE PROCEDURE DBP.TESTING_SP AS 
    DECLARE 
    v_code NUMBER; 
    v_errm VARCHAR2(64); 
    BEGIN 
    UPDATE PS_NE_PHONE_TBL SET NE_PHONE_TYPE = 'TEST' WHERE NEMPLID_TBL = 'N14924'; 

    EXCEPTION 
    WHEN OTHERS THEN 
    v_code := SQLCODE; 
    v_errm := SUBSTR(SQLERRM, 1, 64); 
    DBMS_OUTPUT.PUT_LINE (v_code || ' ' || v_errm); 
    END TESTING_SP; 
    /

Cú pháp chính xác cho những gì tôi đang cố gắng làm là gì?

Tôi đọc trên một diễn đàn

"Khi sử dụng Tạo hoặc Replace cú pháp, bạn không thể sử dụng Declare. Khai báo chỉ dành cho các khối ẩn danh mà không được đặt tên. Vì vậy, hoặc loại bỏ dòng 1 và tạo ra một ẩn danh chặn hoặc xóa dòng 2 và tạo thủ tục có tên. "

nhưng tôi không chắc chắn cách tạo khối ẩn danh hoặc tạo thủ tục được đặt tên để thực hiện những gì tôi muốn làm (nếu đó thực sự là 'giải pháp'). Ai đó có thể giúp một tay không?

+0

Trừ khi bạn đang làm điều gì đó hữu ích với thông tin ngoại lệ, bạn không cần phải nắm bắt nó. Cách tốt nhất để truyền thông tin ngoại lệ cho hàm gọi là không làm gì cả, và để cho ngoại lệ tự nhiên tăng lên. Điều này sử dụng ít mã và bảo tồn số dòng thực của lỗi. –

Trả lời

5

Chỉ cần xóa tuyên bố DECLARE.

+0

tuyệt vời, cảm ơn! bạn có thể giải thích lý do tại sao tôi không cần tuyên bố tuyên bố trong trường hợp này (nơi mà tất cả các ví dụ tôi thấy có tuyên bố tuyên bố)? – n00b

+2

DECLARE dành cho một khối ẩn danh. Nếu bạn đang tạo một thủ tục có thể được gọi theo tên, hãy sử dụng cú pháp TẠO HOẶC THAY THẾ THAY THẾ. Một khối ẩn danh được chạy mỗi khi bạn muốn thực hiện thủ tục. – DCookie