sql >> データベース >  >> RDS >> Oracle

PL / SQLでプログラムで表名を設定するにはどうすればよいですか?

    質問に答えるには、すぐに実行 ステートメントを動的に作成します。

    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;
    

    ただし、これはデータを格納するための非常に複雑な方法です。 すべてを選択する場合 多数のテーブルを結合する必要があるデータ。

    データベースを適切に正規化し、国を従業員に追加する方がはるかに良いでしょう。 テーブル。

    次のようなもの:

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

    すると、プロシージャは非常に単純な挿入ステートメントになります。

    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. VPNを使用したAWSおよびGCPへのセキュアマルチクラウドMySQLレプリケーションのデプロイ

    2. SQLServerの行レベルのセキュリティの概要

    3. ドロップダウン選択ボックスリストからユーザーが選択したオプションの値をmysqlデータベースに保存するにはどうすればよいですか?

    4. 上位nパーセント上位n%