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

标签 sql mysql sql-server oracle informix

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

示例:我刚刚登录到公司 03 下的数据库,但客户表不存在,因此我希望过程为 CREATE TABLE CUSTOMER03

有没有办法将 append company_id char(2)CUSTOMER 并将其提供给 CREATE TABLE 语句?也许喜欢

CREATE TABLE $tablename or $tablename+company_id?

最佳答案

在 Oracle 中,语法类似于

BEGIN
  EXECUTE IMMEDIATE 'CREATE TABLE CUSTOMER_'||v_company_id||' (..)';
END;

然而,这可能是一个非常糟糕的主意。六个月后,您将希望向表中添加一列,并且您需要确定需要将其添加到哪些表中。

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

最好有一个以 company_id 作为属性的客户表。然后使用 Fine Grained Access Control安全地过滤 company_id 以控制谁能看到什么公司的数据。

关于sql - 如何有条件地为 SQL CREATE TABLE 语句构造表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4121307/

相关文章:

php - 绑定(bind)多个参数匹配全文搜索

mysql - 嵌套集查询以检索每个节点的所有祖先

sql - 按邮政编码邻近度搜索 - MySql

php - 两个不同MySQL数据库之间的转换

sql - 对于大量记录来说,动态 sql 存储过程是一件坏事吗?

sql-server - 如何在 SQL Server Docker 容器中使用 Windows 身份验证

sql - GMT 到 EST 时区转换 SSIS/SQL Server

PHP 内存限制与 SQL 结果

sql - 优化 select 查询以返回前 100 条记录(添加 ORDER BY 会减慢查询速度)

.net - 在 MySQL .NET Provider 中使用命名参数