sql >> Database teknologi >  >> RDS >> Oracle

find kolonnenavne og tabelnavne, der henvises til i SQL

Jeg har en god løsning til dig, men der er to ting, du skal gøre:

  1. Placer SQL'en i en PL/SQL-programenhed. Så, ja, til den lagrede procedure, du nævnte.

  2. Kompiler den programenhed og alle afhængige tabeller (det vil sige installer din applikationskode) på en 12.2-instans (du kan downloade 12.2 på http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html eller du kan købe en Exadata Express CLoud-tjeneste på cloud.oracle.com eller få en kredit på 300 USD for at bruge en uden omkostninger i en måned på cloud.oracle.com/tryit).

12.2 er nøglen, fordi den funktion, du VIRKELIG ønsker at bruge, kaldes PL/Scope, og det er et compilerværktøj, der indsamler information om PL/SQL identifikatorer (fra 11.1) og SQL-brug i PL/'SQL (fra 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)

Håber det hjælper!

Mange flere eksempler på PL/Scope på livesql.oracle.com. Bare søg efter "pl/omfang" (duh).



  1. Typeorm returnerer ikke alle data

  2. Oprettelse af delvist unikt indeks med sqlalchemy på Postgres

  3. Implementering af inkrementel belastning ved hjælp af Change Data Capture i SQL Server

  4. Sessionsvariabler:Hvor meget data er for meget?