Oracle
 sql >> база данни >  >> RDS >> Oracle

намиране на имена на колони и имена на таблици, посочени в SQL

Имам чудесно решение за вас, но има две неща, които трябва да направите:

  1. Поставете SQL вътре в PL/SQL програмна единица. Така че, да, за съхранената процедура, която споменахте.

  2. Компилирайте тази програмна единица и всички зависими таблици (т.е. инсталирайте кода на вашето приложение) на екземпляр 12.2 (можете да изтеглите 12.2 от http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html или можете да закупите услуга Exadata Express Cloud на cloud.oracle.com или да получите кредит от $300, за да я използвате безплатно за един месец на cloud.oracle.com/tryit).

12.2 е ключова, защото функцията, която НАИСТИНА искате да използвате, се нарича PL/Scope и е инструмент за компилиране, който събира информация за PL/SQL идентификаторите (от 11.1) и използването на SQL в PL/'SQL (от 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)

Надяваме се, че това помага!

Още много примери за PL/Scope на livesql.oracle.com. Просто потърсете "pl/scope" (да).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Актуализирайте стойностите на множество колони в таблицата с помощта на една заявка

  2. Съвпадение на Oracle SQL Regexp_replace

  3. Ключовата дума FROM не е намерена, където се очаква, избор на текст Oracle SQL

  4. javax.persistence.EntityExistsException с SequenceGenerator

  5. Конфигурирайте SQL*Plus да не връща нищо освен данни