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

dax*_*xue 3 oracle ddl default

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,
);
Run Code Online (Sandbox Code Playgroud)

我如何在Family_name用户使用Name of Family表的值后编写默认的sql ?

Jor*_*pos 6

简单的回答:你不能(不作为默认).如果您已经拥有族表的外键,则不需要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
Run Code Online (Sandbox Code Playgroud)

如果您选择此方法,请Family_NameBabygirl表中删除该列.

您可以根据需要做的唯一事情(重复名称)就是触发这样做.就像是:

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;
Run Code Online (Sandbox Code Playgroud)

我强烈反对这种做法.坚持外键.