Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment définir par programmation le nom de la table en PL/SQL ?

Pour répondre à votre question, vous devez utiliser execute immediate et créez votre relevé dynamiquement.

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;

Cependant, il s'agit d'une manière massivement trop compliquée de stocker les données. Si vous voulez sélectionner tous données dont vous avez besoin pour réunir un grand nombre de tables.

Il serait de loin préférable de normaliser correctement la base de données et d'ajouter un pays à un employees tableau.

Quelque chose comme ce qui suit :

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 )
    );

Votre procédure devient alors une instruction d'insertion très simple :

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;