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

Hvordan indstilles tabelnavnet programmæssigt i PL/SQL?

For at besvare dit spørgsmål skal du bruge udfør øjeblikkeligt og opret din erklæring dynamisk.

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;

Dette er dog en enormt overkompliceret måde at gemme data på. Hvis du vil vælge alle data skal du forene et stort antal tabeller.

Det ville være langt bedre at normalisere databasen korrekt og tilføje land til en medarbejder tabel.

Noget i stil med følgende:

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

Din procedure bliver så en meget simpel indsættelseserklæring:

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. Import af excel-filer med variable overskrifter

  2. Fejl ved oprettelse af Oracle-pakketekst

  3. For loop med dynamisk tabelnavn i Postgresql 9.1?

  4. MySQL:indsæt hvor ikke eksisterer