2015-04-15 38 views
1

語境是否有可能在Oracle的FROM子句中使用CASE WHEN表達式?

使用Oracle 12c的標準版(其許可模式不允許使用表分區)。

目標

使用觸發器內動態地調度行不同的表。

CREATE OR REPLACE trigger TRG_DISPATCH 
    instead of insert or update on MY_VIEW 
    for each row 

DECLARE 
    partition_id SIMPLE_INTEGER ; 

BEGIN 
    partition_id := 1 ; 

    insert into 
    case 
     when partition_id = 1 then "my_table_1" 
     when partition_id = 2 then "my_table_2" 
    end ("id", "code", "msg") 
    values 
    (:new."id", :new."code", :new."msg") 
    ; 
END ; 
/

注意已經知道this cannot be achieved using Microsoft SQL Server 2005但所有的RDBMS是不相等的。

+2

我認爲你需要有兩個不同的插入語句的情況。 – jarlh

+0

@jarlh嘿夥計,希望你做得很好。關於你的建議,是的,它是世界範圍內的工作,但最好知道你爲什麼想在這裏使用CASE表達式?我認爲,否則,已經有一個我正在指導的答案。 –

回答

4

首先,爲什麼不直接使用Oracle中的內置分區功能?更容易。

Oracle支持insert first

insert first 
    when partition_id = 1 then 
     into my_table_1("id", "code", "msg") 
      values (:new."id", :new."code", :new."msg") 
    when partition_id = 2 then 
     into my_table_2("id", "code", "msg") 
      values (:new."id", :new."code", :new."msg"); 
+0

謝謝。我編輯了這個問題來解釋爲什麼我們不使用表分區。 – Chucky

+0

@Gordon Mate,謝謝你把'insert first'帶出墓地;-) IIRC,我最後用了一些......哦,我猜很久以前了:-)像往常一樣往上看 –

相關問題