在 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/