我正试图使用multiset union在名为burse的varray数字列表中再添加一个值,但我得到了这个错误。[1
但当我插入一个值时,它就起作用了。示例:database - 我如何在pl/sql的列中为我的varray列表添加一个值?-LMLPHP
我做错什么了?
这就是我如何声明并插入到database - 我如何在pl/sql的列中为我的varray列表添加一个值?-LMLPHP

最佳答案

这应该管用…

update student
set istoric = istoric multiset union all bure(42, 23)
where id = 1

…除了您现在使用的是varray(而不是您拥有的嵌套表)。所以您会收到一条错误消息:
ORA-00932:不一致的数据类型:预期的UDT GOT BURE
原因是,in your previous question
“虽然嵌套表也可以分段更改,但varray不能…..但是,不能直接用sql更新或删除单个varray元素;必须从表中选择varray,在pl/sql中更改它,然后更新表以包含新的varray。”(强调我的表)
这是因为varray是有序集,而嵌套表不是。除非有严格的要求来维护元素的顺序,否则最好使用嵌套表,而不是varray:它们只是更方便。
下面是如何使用pl/sql更新varray的方法:
declare
    lv bure;
    cnt pls_integer;
begin
    select istoric into lv
    from student
    where id = 1;

    cnt := lv.count();
    lv.extend();
    lv(cnt+1) := 23 ;
    lv.extend();
    lv(cnt+2) := 69 ;

    update student
    set istoric = lv
    where id = 1;
end;
/

关于database - 我如何在pl/sql的列中为我的varray列表添加一个值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49476778/

10-11 20:32