Oracle
 sql >> Database >  >> RDS >> Oracle

Come impostare a livello di codice il nome della tabella in PL/SQL?

Per rispondere alla tua domanda, devi utilizzare execute immediate e crea la tua dichiarazione in modo dinamico.

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;

Tuttavia, questo è un modo estremamente complicato di archiviare i dati. Se vuoi selezionare tutti dati che devi unire un gran numero di tabelle.

Sarebbe molto meglio normalizzare correttamente il database e aggiungere il paese a un employees tabella.

Qualcosa come il seguente:

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

La tua procedura diventa quindi una semplice dichiarazione di inserimento:

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;