是否可以使用SQL更新PL / SQL中的嵌套Oracle表?

时间:2016-05-04 16:26:56

标签: sql oracle plsql oracle11g

我认为这是可能的,但我找不到任何使用SQL更新PL / SQL块中嵌套表的示例。我正在加载一个包含行的嵌套表,现在我想更新多行中的值,而不必遍历表,检查值,然后设置它们。我更喜欢发出SQL语句。

我知道这是一个愚蠢的例子,但我只想提供一个简单的例子...

CREATE TYPE my_rec AS OBJECT (col1 NUMBER, col2 NUMBER, col3 NUMBER);
CREATE TYPE my_tab AS TABLE OF my_rec;

DECLARE
   plstab my_tab := my_tab(NULL,NULL,NULL);
BEGIN
   SELECT my_rec(x,y,z)
   BULK COLLECT INTO plstab
   FROM data_table;
   -- Now I want to update plstab using SQL and set
   -- y = x*10 and z = x+y where x > 10
   -- This won't work...how would I do something like this?
   UPDATE plstab
   SET y = x*10, 
       z = x+y
   WHERE x>10;
END;

1 个答案:

答案 0 :(得分:0)

最简单的解决方法是首先操作SQL,然后执行BULK COLLECT。我在下面举例说明了一个例子。请原谅任何语法错误,因为我现在没有工作区。

DECLARE
   plstab my_tab := my_tab();
BEGIN
SELECFCT my_rec(x,y,z)
BULK COLLECT INTO plstab
FROM
(SELECT x, CASE WHEN X> 10 THEN (X*10) 
        ELSE Y END Y,
         CASE WHEN X> 10 THEN (X+ (CASE WHEN X> 10 THEN (X*10) 
        ELSE Y END)) Z
FROM data_table);

END;