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

tìm tên cột và tên bảng được tham chiếu trong SQL

Tôi có một giải pháp tuyệt vời cho bạn, nhưng có hai điều bạn cần làm:

  1. Đặt SQL bên trong một đơn vị chương trình PL / SQL. Vì vậy, có, đối với thủ tục được lưu trữ mà bạn đã đề cập.

  2. Biên dịch đơn vị chương trình đó và tất cả các bảng phụ thuộc (nghĩa là cài đặt mã ứng dụng của bạn) trên phiên bản 12.2 (bạn có thể tải xuống 12.2 tại http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html hoặc bạn có thể mua Dịch vụ Exadata Express CLoud tại cloud.oracle.com hoặc nhận tín dụng 300 đô la để sử dụng miễn phí một tháng tại cloud.oracle.com/tryit).

12.2 là chìa khóa vì tính năng bạn THỰC SỰ muốn sử dụng được gọi là PL / Scope và nó là một công cụ biên dịch thu thập thông tin về số nhận dạng PL / SQL (kể từ 11.1) và cách sử dụng SQL bên trong PL / 'SQL (kể từ 12.2).

CREATE TABLE my_data (n NUMBER)
/

ALTER SESSION SET plscope_settings='identifiers:all, statements:all'
/

CREATE OR REPLACE PROCEDURE my_procedure (n_in IN NUMBER)
   AUTHID DEFINER
IS
   l_n           my_data.n%TYPE;

   CURSOR all_data_cur
   IS
          SELECT *
            FROM my_data
      FOR UPDATE OF n;
BEGIN
   INSERT INTO my_data (n)
        VALUES (n_in);

END;
/

  SELECT idt.line,
         idt.owner || '.' || idt.object_name code_unit, 
         idt.name column_name,
         RTRIM (src.text, CHR (10)) text
    FROM all_identifiers idt, all_source src
   WHERE     idt.usage = 'REFERENCE'
         AND idt.TYPE = 'COLUMN'
         AND idt.line = src.line
         AND idt.object_name = src.name
         AND idt.owner = src.owner
         AND idt.object_name = 'MY_PROCEDURE'
ORDER BY code_unit, line
/

LINE CODE_UNIT          COLUMN_NAME TEXT  
4   STEVEN.MY_PROCEDURE N           l_n           my_data.n%TYPE;
10  STEVEN.MY_PROCEDURE N           FOR UPDATE OF n;
12  STEVEN.MY_PROCEDURE N           INSERT INTO my_data (n)

Hy vọng điều đó sẽ hữu ích!

Rất nhiều ví dụ khác về PL / Phạm vi tại livesql.oracle.com. Chỉ cần tìm kiếm "pl / scope" (duh).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cần cắt khoảng trống trong oracle

  2. Lỗi (2,7):PLS-00428:mệnh đề INTO được mong đợi trong câu lệnh SELECT này

  3. Cập nhật Bảng Oracle từ Excel VBA Macro bằng cách sử dụng kết nối ODBC

  4. Trong máy chủ SQL, làm cách nào tôi có thể truy vấn cột Dấu thời gian Oracle qua kết nối máy chủ được Liên kết?

  5. Tiếp theo Q:So sánh các hàng trong bảng Oracle và cập nhật các hàng phù hợp