Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Tên thủ tục đang thực hiện trong gói

Trong 12c, tên chương trình con hiện tại chỉ là:

utl_call_stack.subprogram(1)(2);

Gói hiện tại cũng có thể được lấy từ

utl_call_stack.subprogram(1)(1);

nhưng nhìn chung sẽ dễ dàng hơn nếu chỉ sử dụng $$plsql_unit . Bạn cũng có thể lấy tên đủ điều kiện (package.procedure ) như:

utl_call_stack.concatenate_subprogram(utl_call_stack.subprogram(1));

Tuy nhiên , Tôi không thể nghĩ ra bất kỳ tình huống nào mà một thủ tục hoặc hàm (hoặc phương thức đối tượng) lại muốn có tên riêng của nó. Chức năng này chủ yếu hữu ích trong quy trình ghi nhật ký, trong trường hợp đó, 'ai đã gọi cho tôi?' mã phải ở trong trình ghi và không được lặp lại trong mọi thứ gọi nó. Do đó, tôi thực sự khuyên bạn nên tránh bất kỳ 'tôi là ai?' logic trong các thủ tục. Thay vào đó, hãy đặt một cái gì đó như thế này vào trình ghi nhật ký của bạn (yêu cầu 12.1 trở lên):

create or replace procedure logdemo
as
    k_calling_package constant varchar2(128) := utl_call_stack.subprogram(2)(1);
    k_calling_subprog constant varchar2(128) := utl_call_stack.subprogram(2)(2);
begin
    dbms_output.put_line
    ( $$plsql_unit ||
      ' called from package '||k_calling_package||', subprogram '||k_calling_subprog );
end logdemo;

Thật không may, nó phức tạp hơn một chút trong 11g vì bạn phải phân tích cú pháp dbms_utility.format_call_stack và vì điều này chỉ cung cấp cho bạn tên gói và số dòng (trong chuỗi văn bản được phân tách bằng nguồn cấp dữ liệu theo dòng), sau đó bạn phải truy vấn all_source để tìm tên chương trình con.

Tôi có thể đăng một số mã 11g nếu bạn làm rõ nó để làm gì. Trong trình ghi nhật ký 11g của mình, tôi thấy hữu ích khi nắm bắt dbms_utility.format_error_backtrace cũng như dbms_utility.format_call_stack tùy thuộc vào sqlcode vv, do đó, có một loạt logic cụ thể để ghi nhật ký, bạn có thể không cần đến nếu bạn chỉ muốn nắm bắt tên thủ tục hiện tại vì một số lý do khác.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hàm Concat không hoạt động - số lượng đối số không hợp lệ

  2. Sử dụng TUPLES để đặt hơn 1000 mục nhập trong mệnh đề SQL IN

  3. Trình tự ngủ đông nextVal được giải quyết nhưng không được sử dụng (Oracle)

  4. tìm kiếm cơ sở dữ liệu oracle bằng php

  5. Truy vấn mối quan hệ Khoá ngoại của Bảng