Untuk menjawab pertanyaan Anda, Anda harus menggunakan execute immediate
dan buat pernyataan Anda secara dinamis.
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;
Namun, ini adalah cara penyimpanan data yang sangat rumit. Jika Anda ingin memilih semua data Anda harus menggabungkan sejumlah besar tabel.
Akan jauh lebih baik untuk menormalkan database dengan benar dan menambahkan negara ke employees
tabel.
Sesuatu seperti berikut:
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 )
);
Prosedur Anda kemudian menjadi pernyataan penyisipan yang sangat sederhana:
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;