sql >> Databasteknik >  >> RDS >> Oracle

Hur ställer jag in ett tabellnamn i PL/SQL?

För att svara på din fråga måste du använda kör omedelbart och skapa ditt uttalande dynamiskt.

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;

Detta är dock ett enormt överkomplicerat sätt att lagra data. Om du vill välja alla data du har för att förena ett stort antal tabeller.

Det skulle vara mycket bättre att normalisera databasen ordentligt och lägga till land till en anställd bord.

Något i stil med följande:

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 procedur blir då en mycket enkel infogningssats:

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. SQL Fuzzy Matchning

  2. Oracle:Skillnad mellan icke-poolade anslutningar och DRCP

  3. Hur man ställer in anslutningssträng med Entity Framework

  4. Extrahera specifika ord från textfält i mysql