簡體   English   中英

Oracle SQL 更改表添加具有當前用戶名的列

[英]Oracle SQL alter table add column with current user name

這是一個兩部分的問題,我正確地得到了時間戳。 我在 12C 上並嘗試執行以下操作:

ALTER TABLE customers
    ADD modified_by (USER FROM DUAL);

基本上只是表格中的列,顯示誰修改了表格以及他們在什么時間這樣做。

我也試過

ALTER TABLE customers
    ADD last_modified TIMESTAMP;
ALTER TABLE customers
    ADD modified_by USER;

以及我在本網站和其他網站上找到的其他關鍵字組合,但它們都不起作用。

我們只在課堂上學過雙重,但我正在尋找任何方法來做這些。

編輯:

我現在明白了用戶用近 100 萬點教給我的東西。

仍然不確定如何做用戶名。 閱讀: https : //docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2114.htm#REFRN20302

並嘗試:

ALTER TABLE customers
    ADD modified_by USERNAME;

不起作用得到無效的數據類型。

然后看到這個: https : //www.techonthenet.com/oracle/questions/find_users.php

並嘗試:

ALTER TABLE customers
    ADD modified_by USERNAME FROM DBA_USERS;

但獲得無效的更改表選項。 SQL 很難。

如果您通讀有關虛擬列的 Oracle文檔,您會發現:

表達式中的函數在創建表時必須是確定性的,但隨后可以重新編譯並使其成為非確定性的

確定性函數是在傳遞相同參數時返回相同值的函數。 您使用的表達式包含非確定性函數。 因此,它們是不被允許的。

我嘗試這個時得到的錯誤是:

ORA-54002: 在虛擬列表達式中只能指定純函數

由於某些未知原因,Oracle 在錯誤消息中將“純”等同於“確定性”。 但這就是說該函數需要是確定性的。

編輯問題后,您似乎更接近您想要的。 這個:

ALTER TABLE customers ADD modified_by VARCHAR2(30);
                                      ^^^^^^^^^^^^
                                      datatype goes here, not what you'd like
                                      to put into this column

然后,在該表的插入或更新期間,您將USER放在那里,例如

insert into customers (id, modified_by) values (100, USER);

或者,可能更好,將其設置為默認值,正如@a_horse_with_no_name 建議的那樣:

ALTER TABLE customers ADD modified_by VARCHAR2(30) DEFAULT USER;

所以 - 如果您沒有明確地將任何內容放入該列,它將使用USER函數的值填充。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM