问题描述
请参考我随此问题附上的脚本-
由于表-test_mgr_hierar5上的光标循环,有些记录应该存储在表类型变量中。
预计表类型将保存列person_id的值-177603、157564、157286、186196。
下一步是-需要从表-test_mgr_hierar90中删除记录,其中person_id不是上述记录。所以实际上它的类似-从test_mgr_hierar50删除其中person_id不在 (177603,157564,157286,186196) -这些值收集在表类型变量。
我面临的问题不是删除,而是不知何故,我无法通过循环/扩展子句在表类型变量中收集这些值。所以我的问题只与下面的条款有关-
对于csr1中的v
循环深度 _ 最大值: = 深度 _ 最大值1;
exch_rt.EXTEND;
-- exch_rt(depts_max) := v.person_id; --- 这是一个错误的错误 (PLS-00382: 表达式类型错误
结束循环;
我已经分享了所有步骤/脚本,并附上了会话。我尝试了多种方法来更改该语句,但这似乎不起作用 (附件会话中的详细信息) 或赋值语句,但在不同的试验和错误后无法找到。因此,您只需要建议将值分配到表类型变量中的正确方法。
由于表-test_mgr_hierar5上的光标循环,有些记录应该存储在表类型变量中。
预计表类型将保存列person_id的值-177603、157564、157286、186196。
下一步是-需要从表-test_mgr_hierar90中删除记录,其中person_id不是上述记录。所以实际上它的类似-从test_mgr_hierar50删除其中person_id不在 (177603,157564,157286,186196) -这些值收集在表类型变量。
我面临的问题不是删除,而是不知何故,我无法通过循环/扩展子句在表类型变量中收集这些值。所以我的问题只与下面的条款有关-
对于csr1中的v
循环深度 _ 最大值: = 深度 _ 最大值1;
exch_rt.EXTEND;
-- exch_rt(depts_max) := v.person_id; --- 这是一个错误的错误 (PLS-00382: 表达式类型错误
结束循环;
我已经分享了所有步骤/脚本,并附上了会话。我尝试了多种方法来更改该语句,但这似乎不起作用 (附件会话中的详细信息) 或赋值语句,但在不同的试验和错误后无法找到。因此,您只需要建议将值分配到表类型变量中的正确方法。
专家解答
exch_tbl是 * objects * 的表,因此数组中的每个条目都必须是一个对象
所以在你的例子中
我已经删除了你的 “当其他人那么空” ....请不要把它放回去 :-)
所以在你的例子中
SQL> create or replace type exch_row as object ( 2 person_id NUMBER); 3 4 / Type created. SQL> SQL> create or replace type exch_tbl as table of exch_row; 2 / Type created. SQL> SQL> SQL> DECLARE 2 l_row exch_row; 3 exch_rt exch_tbl; 4 depts_max NUMBER; 5 6 CURSOR csr1 7 IS 8 select 100 person_id from dual; 9 10 BEGIN 11 depts_max := 0; 12 exch_rt := exch_tbl(); 13 14 for v IN csr1 15 LOOP 16 depts_max := depts_max + 1; 17 exch_rt.EXTEND; 18 exch_rt(depts_max) := exch_row(v.person_id); <============= object 19 END LOOP; 20 END; 21 / PL/SQL procedure successfully completed.
我已经删除了你的 “当其他人那么空” ....请不要把它放回去 :-)
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




