【问题标题】:PLSQL record created with %rowtype being used as element for table gives compile/run error使用 %rowtype 创建的 PLSQL 记录用作表的元素会产生编译/运行错误
【发布时间】:2014-09-09 17:53:55
【问题描述】:

我正在声明一个记录的表自定义数据类型,该记录由一个表的 %rowtype 创建,名称为:TMP_UNREGISTER_TAB,该表存在于数据库中。在尝试执行下面的 plsql anon 块时,我得到了下面指定的错误。

PLSQL 代码:

declare
  rec_tmp_tab TMP_UNREGISTER_TAB%rowtype ;
  v_rec_tmp_tab rec_tmp_tab;
  TYPE tab_rec_tmp IS TABLE OF v_rec_tmp_tab%type
  INDEX BY BINARY_INTEGER;   
  v_tab_rec_tmp tab_rec_tmp;
begin
  null;
  end;
 /

脚本输出:

Error report:
ORA-06550: line 3, column 18:
PLS-00488: 'REC_TMP_TAB' must be a type
ORA-06550: line 3, column 18:
PL/SQL: Item ignored
ORA-06550: line 4, column 33:
PLS-00320: the declaration of the type of this expression is incomplete or malformed
ORA-06550: line 4, column 4:
PL/SQL: Item ignored
06550. 00000 -  "line %s, column %s:\n%s" 
*Cause:    Usually a PL/SQL compilation error.
*Action:

【问题讨论】:

  • rec_tmp_tab 是一个变量,而不是一个类型。
  • 稍微扩展前面的评论我认为您需要在定义TYPE tab_rec_tmp 时指定TMP_UNREGISTER_TAB%ROWTYPE。分享和享受。
  • 将表声明为:TYPE tab_rec_tmp IS TABLE OF rec_tmp_tab%type INDEX BY BINARY_INTEGER;

标签: plsql


【解决方案1】:
declare
  rec_tmp_tab TMP_UNREGISTER_TAB%rowtype ;
  TYPE tab_rec_tmp IS TABLE OF TMP_UNREGISTER_TAB%rowtype 
  INDEX BY BINARY_INTEGER;   
  v_tab_rec_tmp tab_rec_tmp;
begin
  null;
end;
/

【讨论】:

  • 请解释 OP 的代码有什么问题以及为什么通过编辑您的答案来解决问题。
猜你喜欢
  • 1970-01-01
  • 2015-07-10
  • 2017-02-03
  • 2020-11-25
  • 1970-01-01
  • 2022-07-01
  • 2011-01-01
  • 1970-01-01
相关资源
最近更新 更多