[英]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
列,因此您無法UPDATE
或INSERT
它
但我認為你可以使用一個簡單的技巧來繞過這個問題,你可以嘗試在你的表中添加一個 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.