在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_bycreated_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

如何在颤动中将默认值设置为下拉菜单?

在实体框架数据库优先方法中将默认值 1 设置为实体名称(状态)

如何在 SQL Server 中将函数设置为默认值?

如何在c ++中将前面的函数参数设置为其默认值?

如何在 phpmyadmin 中将“关系显示列”设置为默认值