2012-07-17 60 views
-1

我在Oracle基础上创建了一个触发器。PL/SQL:在触发器中通过名称设置列值

TRIGGER Customer_trigger 
BEFORE INSERT ON Customer 
FOR EACH ROW 

它通过http请求连接到某个服务。该服务在响应中给出列和他们的值。我的问题是如何通过名称设置列值。我想要做这样的事情。

column_name := from http response 
column_value := from http response 
:new.<column_name> := column_value 

我试着用立即执行没有运气。

感谢您的任何帮助。

+0

您不能更改列的值在AFTER INSERT触发器 - 你可以使用':NEW 。 := BEFORE INSERT触发器中的语法,但是。 – 2012-07-17 07:38:17

+0

我的错误!它是在触发之前。 – 2012-07-17 08:17:27

+3

当你说“我试图立即使用而没有运气”发生了什么 - 或没有发生?请向我们显示您的代码和其他相关详细信息,包括错误消息。 – APC 2012-07-17 08:29:05

回答

1

在触发你不能动态地设置列名,但你可以做到以下几点:

case http_response.column_name 
    when 'c1' then :new.c1 := http_response.column_value; 
    when 'c2' then :new.c2 := http_response.column_value; 
    when 'c3' then :new.c3 := http_response.column_value; 
    ... 
end case; 
+2

我提高了这个,因为这是一个可行的解决方案。不过,我同意@BobJarvis提出的方案是一个非常糟糕的实现。 – APC 2012-07-17 11:36:39

相关问题