sql >> Database >  >> RDS >> Oracle

vind kolomnamen en tabelnamen waarnaar in SQL wordt verwezen

Ik heb een geweldige oplossing voor je, maar er zijn twee dingen die je moet doen:

  1. Plaats de SQL in een PL/SQL-programma-eenheid. Dus ja, op de opgeslagen procedure die je noemde.

  2. Compileer die programma-eenheid en alle afhankelijke tabellen (dat wil zeggen, installeer uw applicatiecode) op een 12.2-instantie (u kunt 12.2 downloaden op http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html of u kunt een Exadata Express Cloud-service kopen op cloud.oracle.com of een tegoed van $ 300 krijgen om er een maand lang gratis een te gebruiken op cloud.oracle.com/tryit).

12.2 is de sleutel omdat de functie die je ECHT wilt gebruiken PL/Scope heet en het een compilertool is die informatie verzamelt over PL/SQL-ID's (vanaf 11.1) en SQL-gebruik binnen PL/'SQL (vanaf 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)

Ik hoop dat dat helpt!

Veel meer voorbeelden van PL/Scope op livesql.oracle.com. Zoek gewoon naar "pl/scope" (duh).



  1. Een door komma's gescheiden tekenreeks omzetten in afzonderlijke rijen

  2. mysql check-sortering van een tabel

  3. Hoe krijg ik een leeftijd uit een D.O.B-veld in MySQL?

  4. functie om te controleren of SQLite journal_mode=WAL of journal_mode=DELETE gebruikt