插入视图时的默认值

Posted

技术标签:

【中文标题】插入视图时的默认值【英文标题】:Default values when inserting into a view 【发布时间】:2013-04-16 20:22:34 【问题描述】:

我有以下观点 [canadian_users]:

SELECT id, name, email
FROM users
WHERE country_id = 3;

它适用于选择数据。我想知道的是,如何使我插入视图的数据默认为country_id = 3

例如,当我现在插入视图时,country_idNULL

INSERT INTO canadian_users (name, email) VALUES ("bob", "foo@bar.com");
=> 
  name: bob
  email: foo@bar.com
  country_id: NULL

有没有办法让country_id默认变为3

INSERT INTO canadian_users (name, email) VALUES ("bob", "foo@bar.com");
=> 
  name: bob
  email: foo@bar.com
  country_id: 3

我确实想在users 表上将列的默认值设置为 3。会有类似的看法。

另外,我的整个情况都被截断以提出一个简洁的 SO 问题。是的,视图是必要的,而且我不太可能在我的 INSERT 语句中实际设置 country_id

【问题讨论】:

我也刚刚在***.com/questions/4836759/…***.com/questions/4836759/…上发现了另一个类似的问题 【参考方案1】:

我认为这是不可能的。我能想到的唯一选择是调用存储过程/函数而不是INSERT 语句。比如:

CREATE PROCEDURE insert_canadian_user( name VARCHAR(20), email VARCHAR(20) )
BEGIN
    INSERT INTO users
    VALUE (name, email, country_id);
END

但是,我很难相信您不能将 country_id 添加到您的 INSERT 语句中。我想您的应用程序有一个例程,该例程基本上选择要访问的视图,大概基于您的用户所在的国家/地区(例如,当用户登录时)。然后你就可以把对应的country_id一起存起来。

【讨论】:

以上是关于插入视图时的默认值的主要内容,如果未能解决你的问题,请参考以下文章

Postgres视图中的默认值,触发代替更新

Oracle中插入默认时间

Jquery Slider,加载时的默认值

不存在关系时的默认值

使用默认值添加不可为空的列时的 Oracle 错误

使用 LINQ 时的默认 xml 属性值