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

Как да зададете програмно име на таблица в PL/SQL?

За да отговорите на въпроса си, трябва да използвате execute immediate и създайте своето изявление динамично.

create or replace procedure hire_employee (
        emp_id IN INTEGER
      , name IN VARCHAR2
      , country IN VARCHAR2 ) is

   -- maximum length of an object name in Oracle is 30
   l_table_name varchar2(30) := 'employees_' || country;

begin
    execute immediate 'insert into ' || l_table_name
                       || ' values (:1, :2, 1000)'
      using emp_id, name;
end hire_employee;

Това обаче е изключително сложен начин за съхраняване на данните. Ако искате да изберете всички данни, които трябва да обедините голям брой таблици.

Би било много по-добре да се нормализира правилно базата данни и да се добави държава към employees таблица.

Нещо като следното:

create table employees (
    emp_id number(16)
  , country varchar2(3) -- ISO codes
  , name varchar2(4000) -- maximum who knows what name people might have
  , < other_columns >
  , constraint pk_employees primary key ( emp_id )
    );

След това вашата процедура се превръща в много проста инструкция за вмъкване:

create or replace procedure hire_employee (
       emp_id in integer
     , name in varchar2
     , country in varchar2 ) is

    insert into employees
    values ( emp_id, country, name, 1000 );

end hire_employee;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да намеря дефиницията на наименувано ограничение в Oracle?

  2. ORA-00947 Няма достатъчно стойности при глобално деклариране на типа

  3. Oracle SQL - динамичен случай

  4. Разлика между VARCHAR2(10 CHAR) и NVARCHAR2(10)

  5. Как да копирате само първите 4000 знака от Oracle NCLOB в NVARCHAR2(4000) стойност?