oracle - 如何在创建新表时默认具有其他表列值的列?

标签 oracle default ddl

CREATE TABLE "Family" (
  "Family_ID" INTEGER NOT NULL, 
  "Name" TEXT(20) NOT NULL,
);

CREATE TABLE "Babygirl" (
  "Baby_Id" INTEGER NOT NULL,
  "Family_ID" INTEGER NOT NULL,
  "Family_Name" TEXT(20) NOT NULL default......,
  "Last_Name" TEXT(20) NOT NULL,
);

我如何在 Family_name 用户之后编写 default 的 sql 用户 Family 表的 Name 的值?

最佳答案

简单的回答:你不能(不是默认的)。如果你已经有了家庭表的外键,你就不需要 Babygirl 表上的名字。当您需要它时,只需在一个简单的 sql 语句中连接两个表即可。

也不要在表名和列名上使用双引号。给它写sql语句会很吃力。

类似于:

select f.columnsFromFamily, 
       b.columnsFromBabyGirl -- this is just an example
  from Family f
        inner join Babygirl b ON f.Family_ID = b.Family_ID

如果您选择这种方法,请从 Babygirl 表中删除 Family_Name 列。

您唯一可以随心所欲地做的事情(重复名称)就是有一个触发器来这样做。像这样的东西:

CREATE OR REPLACE TRIGGER ON trg_Babygirl
     BEFORE INSERT 
     ON Baygirl
as
DECLARE
   vFamilyName Family.Name%ROWTYPE;
BEGIN
     select Name INTO vFamilyName 
       from Family
      where Family_id = :NEW.Family_ID;
      --set the name here
      :NEW.Family_Name := vFamilyName;
END;

我强烈反对这种方法。只需坚持使用外键即可。

关于oracle - 如何在创建新表时默认具有其他表列值的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35763335/

相关文章:

c# - 仅当上下文使用关系数据库提供程序时才能使用特定于关系的方法?

java - 如何在 Oracle AQ 中停止在未经确认的情况下删除消息?

mysql - 如何使用连接编写 Hibernate HQL 查询?

asp.net - 如何将default.aspx设置为Visual Studio调试器的默认启动点?

database - 如何从另一个表继承列值

ios - 如何为在 NSUserDefaults 中保存数据的 UITextField 设置默认值

c# - 在 C# 中使用 "default"作为枚举

MySQL 初学者 - PHPMyAdmin 总是抛出错误,找不到原因

postgresql - 为什么 drop table cascade 不删除 postgresql 中的子表?

mysql - 索引和删除语句