簡體   English   中英

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

[英]Is it possible to update a nested Oracle table in PL/SQL using SQL?

我認為這是可能的,但我找不到任何如何使用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;

最簡單的解決方法是首先操作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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM