在我的 oracle 應用程式中,我使用了三列并將它們在我的 SQL 查詢中連接到一個產品編號:
SELECT id_part1 || '.' || id_part2 || '.' || id_part3 as product_number
FROM table
但是由于虛擬列,我在執行任何更新或插入查詢時遇到問題。我如何執行這些操作,以便將虛擬列分解為三個原始列并正確保存每個值。
非常感謝
杰克
uj5u.com熱心網友回復:
列product_number不在表中存在,所以你不能UPDATE也不INSERT它
但我認為你可以使用一個簡單的技巧來繞過這個問題,你可以嘗試product_number在你的表中添加一個 phisical 列,然后添加一個 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;
uj5u.com熱心網友回復:
據我從評論和問題中了解到,您關注的是一個普通的字串型別列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并且不會在相關段內占用任何額外空間,而僅代表您要顯示的邏輯。
Demo
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/349310.html
