Om je vraag te beantwoorden, moet je direct uitvoeren
en maak uw verklaring dynamisch.
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;
Dit is echter een enorm ingewikkelde manier om de gegevens op te slaan. Als u alle wilt selecteren gegevens die u nodig heeft om grote aantallen tabellen samen te voegen.
Het zou veel beter zijn om de database goed te normaliseren en land toe te voegen aan een medewerkers
tafel.
Iets als het volgende:
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 )
);
Uw procedure wordt dan een heel eenvoudig insert-statement:
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;