sql >> Databáze >  >> RDS >> Oracle

najít názvy sloupců a názvy tabulek odkazované v SQL

Mám pro vás skvělé řešení, ale budete muset udělat dvě věci:

  1. Umístěte SQL do programové jednotky PL/SQL. Takže ano, k uložené proceduře, kterou jste zmínili.

  2. Zkompilujte tuto programovou jednotku a všechny závislé tabulky (tj. nainstalujte kód aplikace) na instanci 12.2 (12.2 si můžete stáhnout na http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html nebo si můžete zakoupit službu Exadata Express CLoud na adrese cloud.oracle.com nebo získat kredit 300 USD, který můžete po dobu jednoho měsíce zdarma používat, na adrese cloud.oracle.com/tryit).

12.2 je klíčová, protože funkce, kterou OPRAVDU chcete používat, se nazývá PL/Scope a je to kompilační nástroj, který shromažďuje informace o PL/SQL identifikátorech (od 11.1) a použití SQL v PL/'SQL (od 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)

Doufám, že to pomůže!

Mnoho dalších příkladů PL/Scope na livesql.oracle.com. Stačí vyhledat „pl/scope“ (duh).



  1. Nemohu se přihlásit do své místní kopie Magento - jak použít ztracené heslo s místní kopií softwaru?

  2. Vytvořte dynamickou tabulku z funkce v PostgreSQL

  3. SQL:Převádění řádků do sloupců

  4. Srovnávání výkonu MySQL:MySQL 5.7 vs MySQL 8.0