在Oracle中将默认值设置为当前用户
Posted
技术标签:
【中文标题】在Oracle中将默认值设置为当前用户【英文标题】:Setting the default value to the current user in Oracle 【发布时间】:2013-06-03 19:28:22 【问题描述】:我正在尝试在 Oracle 11g 中创建一个新表,其中列的默认值是当前登录的用户。我需要这样做是为了记录。
CREATE TABLE tracking (
pk NUMBER(19,0) PRIMARY KEY,
description VARCHAR2(50),
created_by VARCHAR2(128) DEFAULT CURRENT_USER
);
如何编写DEFAULT CURRENT_USER
部分,以便将当前Oracle 用户作为默认值?我知道我可以使用触发器,但我不应该...
【问题讨论】:
如何更改当前用户的表添加列,以便记录上次修改表的用户? 【参考方案1】:您需要使用USER
而不是CURRENT_USER
:
CREATE TABLE tracking (
pk NUMBER(19,0) PRIMARY KEY,
description VARCHAR2(50),
created_by VARCHAR2(128) DEFAULT USER
);
SQL Fiddle
用户的最大长度为 30,因此您可以减少此长度,我会增加您的 DESCRIPTION 列的大小,除非您非常确定所有内容都将少于 51 个字符。
【讨论】:
+1 @Ben - 都是真的,你比我快 2 秒 :) 为了回应 Gordon 的评论,创建一个 CREATED_AT 列也可能是个好主意。 可以将LOCALTIMESTAMP
用作DEFAULT
值吗?实际上,使用触发器而不是默认值的一个原因是防止任何人明确设置 created_by
或 created_at
列。
Yes it can@EricJablow。我通常只使用一个简单的 SYSDATE ......你对触发器是正确的,但如果这是一个正确的跟踪表,那么通常不会向任何用户授予写访问权限。您在表所在的架构中创建一个过程,并将对该过程的执行权限授予其他所有人(例如)。或者,它仅由系统触发器等填充。
@Ben,我只是一名业余 DBA。谢谢。不过,我之前需要将创建日期和用户添加到常规表中。【参考方案2】:
改用user
:
CREATE TABLE tracking (
pk NUMBER(19,0) PRIMARY KEY,
description VARCHAR2(50),
created_by VARCHAR2(128) DEFAULT USER
);
顺便说一句,我还认为日期时间的created_at
是另一个有用的默认列。
【讨论】:
以上是关于在Oracle中将默认值设置为当前用户的主要内容,如果未能解决你的问题,请参考以下文章
在 System.ComponentModel 默认值属性中将 DateTime 属性的默认值设置为 DateTime.Now