如何有条件地为SQL CREATE TABLE语句构造表名?

Fra*_* R. 1 mysql sql sql-server oracle informix

在SQL存储过程中,我希望能够构造表名并创建它.

示例:我刚刚登录公司03下的数据库,并且客户表不存在,所以我想要proc CREATE TABLE CUSTOMER03.

有没有一种方式来append company_id char(2)CUSTOMER它喂的CREATE TABLE声明?也许就像

CREATE TABLE $tablename or $tablename+company_id?
Run Code Online (Sandbox Code Playgroud)

Gar*_*ers 9

在Oracle中,语法类似于

BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE CUSTOMER_'||v_company_id||' (..)';
END;
Run Code Online (Sandbox Code Playgroud)

然而,这可能是一个非常糟糕的主意.在线下六个月,您需要在表格中添加一列,您需要确定需要将哪些表添加到表中.

此外,Oracle中的存储过程需要一个固定的表名(现有表),或者您必须通过动态SQL引用所有内容,这很痛苦.

最好使用company_id作为属性的单个customer表.然后使用细粒度访问控制来安全地过滤company_id,以控制谁看到公司的数据.