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;