簡體   English   中英

如何使用虛擬列執行 SQL-INSERT/UPDATE

[英]How can I perform a SQL-INSERT/UPDATE with a virtual column

在我的 oracle 應用程序中,我使用了三列並將它們在我的 SQL 查詢中連接到一個產品編號:

SELECT id_part1 || '.' || id_part2 || '.' || id_part3 as product_number
FROM table

但是由於虛擬列,我在執行任何更新或插入查詢時遇到問題。 我如何執行這些操作,以便將虛擬列分解為三個原始列並正確保存每個值。

非常感謝

傑克

表中不存在product_number列,因此您無法UPDATEINSERT

但我認為你可以使用一個簡單的技巧來繞過這個問題,你可以嘗試在你的表中添加一個 phisical 列product_number然后添加一個 BEFORE UPDATE 觸發器

CREATE OR REPLACE TRIGGER CalculatedColumnSplit
    BEFORE 
    INSERT OR UPDATE 
    ON myTable
    FOR EACH ROW
DECLARE
   
BEGIN
    :new.id_part1 := regexp_substr(:new.product_number,'[^.]+', 1, 1);
    :new.id_part2 := regexp_substr(:new.product_number,'[^.]+', 1, 2);
    :new.id_part3 := regexp_substr(:new.product_number,'[^.]+', 1, 3);
    :new.product_number := NULL;
END;

據我從評論和問題中了解到,您關注的是一個普通的字符串類型列product_number ,它需要通過點拆分為其他列。 然后您可以根據需要添加虛擬列,如下所示

ALTER TABLE t
ADD (
    id_part1 AS (REGEXP_SUBSTR(product_number,'[^.]+',1,1)),
    id_part2 AS (REGEXP_SUBSTR(product_number,'[^.]+',1,2)),
    id_part3 AS (REGEXP_SUBSTR(product_number,'[^.]+',1,3))
);

那些新添加的列將完全取決於列product_number並且不會在相關段內占用任何額外空間,而僅代表您要顯示的邏輯。

演示

暫無
暫無

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

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