我想使用用户定义的函数,以便在列中插入值时,我想通过引用同一表中的其他列来将月份的last_day 插入一列中。
我的代码是-
insert into table_A
(id,pma_timestamp,monthend)
values
(103,'2017-08-15',last_day(pma_timestamp));
Run Code Online (Sandbox Code Playgroud)
但出现错误:
提示:表“table_a”中有一个名为“pma_timestamp”的列,但无法从这部分查询中引用它
如何解决这个问题
小智 5
如果子句中是目标表,则不能使用列values()。您需要重复为该列提供的值:
insert into table_A
(id, pma_timestamp, monthend)
values
(103, '2017-08-15', last_day('2017-08-15'));
Run Code Online (Sandbox Code Playgroud)
如果您不想重复该值,可以编写一个填充该monthend列的 INSERT 触发器。那么您根本不需要为其提供值。
在关系数据库中,存储可以轻松从现有值派生的数据通常不是一个好主意。列monthend就是这样一个派生属性。我根本不会存储它,因为pma_timestamp可以在 SELECT 查询期间轻松计算它。如果您不想重复计算,请创建一个提供该信息的视图。