sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo establecer programáticamente el nombre de la tabla en PL/SQL?

Para responder a su pregunta, debe usar execute immediate y crea tu declaración dinámicamente.

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;

Sin embargo, esta es una forma enormemente complicada de almacenar los datos. Si desea seleccionar todos datos que tiene para unir un gran número de tablas.

Sería mucho mejor normalizar la base de datos correctamente y agregar el país a un employees mesa.

Algo como lo siguiente:

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

Su procedimiento entonces se convierte en una declaración de inserción muy 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;