Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak programowo ustawić nazwę tabeli w PL/SQL?

Aby odpowiedzieć na swoje pytanie, musisz użyć execute immediate i twórz swoje oświadczenie dynamicznie.

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;

Jest to jednak bardzo skomplikowany sposób przechowywania danych. Jeśli chcesz zaznaczyć wszystkie dane potrzebne do połączenia dużej liczby tabel.

O wiele lepiej byłoby prawidłowo znormalizować bazę danych i dodać kraj do employees tabeli.

Coś takiego:

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

Twoja procedura staje się wtedy bardzo prostą instrukcją wstawiania:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Procedura wykonania klauzuli sprawy

  2. Oznacz osoby, które mają wspólne funkcje z Oracle SQL

  3. Dlaczego SQL Engine jest wywoływany do wywołania PL/SQL z aplikacji klienckiej?

  4. Problemy z wywoływaniem procedury składowanej z C# z dużym CLOB

  5. Zastąp lub usuń wiele wierszy tekstu w procedurze składowanej Oracle