sql >> Databáze >  >> RDS >> Oracle

Jak programově nastavit název tabulky v PL/SQL?

Chcete-li odpovědět na svou otázku, musíte použít execute immediate a dynamicky vytvořte své prohlášení.

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;

Jedná se však o velmi komplikovaný způsob ukládání dat. Pokud chcete vybrat vše data musíte sjednotit velké množství tabulek.

Daleko lepší by bylo správně normalizovat databázi a přidat zemi do employees tabulka.

Něco jako následující:

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

Vaše procedura se pak stane velmi jednoduchým příkazem vložení:

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;


  1. Jak vložit prostorová data do MySQL pomocí PHP?

  2. dotaz oracle k nalezení oprávnění k uložené proceduře

  3. Odečtení 30 let od aktuálního data v Oracle SQL

  4. Pravda/nepravda vs 0/1 v MySQL