如何在创建新表时使用其他表的colunm值来默认列?

时间:2016-03-03 04:40:31

标签: 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 用户之后编写默认的sql Family 表的名称的值?

1 个答案:

答案 0 :(得分:6)

简单回答:你不能(不是DEFAULT)。如果您已经拥有家庭表的外键,那么您不需要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

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

您可以根据需要做的唯一事情(重复名称)就是触发这样做。类似的东西:

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;

我强烈反对这种做法。只要坚持使用外键。