sql >> Database >  >> RDS >> Oracle

Hoe de tabelnaam in PL/SQL programmatisch in te stellen?

Om je vraag te beantwoorden, moet je direct uitvoeren en maak uw verklaring 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;

Dit is echter een enorm ingewikkelde manier om de gegevens op te slaan. Als u alle wilt selecteren gegevens die u nodig heeft om grote aantallen tabellen samen te voegen.

Het zou veel beter zijn om de database goed te normaliseren en land toe te voegen aan een medewerkers tafel.

Iets als het volgende:

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

Uw procedure wordt dan een heel eenvoudig insert-statement:

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. optimizer_search_depth in Google Cloud SQL

  2. Hoe records te verwijderen NIET IN

  3. Postgres pl/java waarschuwingen

  4. Uitvoer van een MySQL-query omkeren?