Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Wie kann man den Tabellennamen in PL/SQL programmgesteuert festlegen?

Um Ihre Frage zu beantworten, müssen Sie sofort ausführen und erstellen Sie Ihren Auszug 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;

Dies ist jedoch eine massiv zu komplizierte Art, die Daten zu speichern. Wenn Sie alle auswählen möchten Daten müssen Sie eine große Anzahl von Tabellen vereinen.

Es wäre viel besser, die Datenbank richtig zu normalisieren und ein Land zu Mitarbeitern hinzuzufügen Tabelle.

Etwas wie das Folgende:

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

Ihre Prozedur wird dann zu einer sehr einfachen Einfügeanweisung:

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;