Oracle SQL 触发器不会带来任何价值



我有以下表格结构:

Product_Name    Product_Id    Product_Type
Car             123           A
House           ABC           B
Ball            UZY           B

等等…Product Id来自两个不同的Customer feed表(表A和表B,都有Product_Name和Product_id)。一旦他们在任何表上创建了一个新行(插入),一个序列添加一个新的(随机的)Product_Id。我有一个触发器,当新行插入到我的表(用于审计,报告等目的表)时,它基本上试图查找该Product Id:

create or replace TRIGGER  "MY_INSERT_ID_TRIGGER" 
before insert on "MY_TABLE"                
for each row   
DECLARE
begin    
if :NEW.My_Product_Name is null and lower(:NEW.My_product_type) = 'A'
then
SELECT DISTINCT Product_Id
INTO :NEW.My_product_id
FROM CUSTOMER_PRODUCT_TABLE_A
--To remove special characters and spaces:
WHERE lower( regexp_replace( replace(Product_name, ' ', '') , '[^a-zA-Z ]') )
=
lower( regexp_replace( replace(:NEW.My_Product_name, ' ', '') , '[^a-zA-Z ]') );
elsif  :NEW.PRODUCT is null and lower(:NEW.PRODUCT_TYPE) = 'B'
then
SELECT DISTINCT Product_Id
INTO :NEW.My_product_id
FROM CUSTOMER_PRODUCT_TABLE_B
--To remove special characters and spaces:
WHERE lower( regexp_replace( replace(Product_name, ' ', '') , '[^a-zA-Z ]') )
=
lower( regexp_replace( replace(:NEW.My_Product_name, ' ', '') , '[^a-zA-Z ]') );
else null;
end if;
end;

我的表结构如下:

My_product_name    My_product_id    My_product_type

两个select在独立运行时(在触发器之外)都可以正常工作,但是,触发器本身不会带来任何值。有人知道为什么吗?

感谢

这将是SQL结构:

create table CUSTOMER_PRODUCT_TABLE_A
(
Product_Name varchar2(300),
Product_id varchar2(300)
)
create table CUSTOMER_PRODUCT_TABLE_B
(
Product_Name varchar2(300),
Product_id varchar2(300)
)
create table MY_TABLE
(
My_product_name varchar2(300),
My_product_id varchar2(300),
My_product_type varchar2(300)
)
INSERT ALL
INTO CUSTOMER_PRODUCT_TABLE_A (Product_Name, Product_id)  
VALUES('Product1-A', 123)
INTO CUSTOMER_PRODUCT_TABLE_A (Product_Name, Product_id)  
VALUES('Product2-A', 123)
INTO CUSTOMER_PRODUCT_TABLE_A (Product_Name, Product_id)  
VALUES('Product3-A', 123)
INTO CUSTOMER_PRODUCT_TABLE_B (Product_Name, Product_id)  
VALUES('Product1-B', 'ABC')   
INTO CUSTOMER_PRODUCT_TABLE_B (Product_Name, Product_id)  
VALUES('Product2-B', 'DEF')
INTO CUSTOMER_PRODUCT_TABLE_B (Product_Name, Product_id)  
VALUES('Product3-B', 'GHI')
SELECT 1 FROM DUAL

所以插入'Product1-A'到My_Table将返回它的Id作为触发器(到我的表列my_product_id)。

感谢

这些总是会失败:

lower(:NEW.My_product_type) = 'A'

lower(:NEW.PRODUCT_TYPE) = 'B'

最新更新