暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何根据对象类型填充表类型

askTom 2018-06-25
249

问题描述

大家好
我正在尝试基于对象类型创建表类型,但是当我尝试填充它时,出现错误。我从几个地方复制了语法,但似乎我做错了什么。

这是代码

CREATE OR REPLACE TYPE T1_OBJ AS OBJECT
(field1 VARCHAR2(10),
 field2 INTEGER);
 
CREATE OR REPLACE TYPE T1_TAB AS TABLE OF T1_OBJ;

DECLARE
  v_t1 T1_TAB;
BEGIN
  v_t1 := T1_TAB('Hernan',NULL);
END;

now, for some reason, if i put all null values, it works

DECLARE
  v_t1 T1_TAB;
BEGIN
  v_t1 := T1_TAB(NULL,NULL);
END;


但是每当我尝试放置任何值时,它只是返回错误消息。“错误的参数数量或类型”
有人能给我指出正确的方向吗?网上的样品不多。
提前谢谢。

专家解答

我们经常创建一个对象表,然后把它想象成一个 “类似Excel” 的结构,即,我有一个 'n' 行,每一行都有 'p' 列,其中 'p' 是对象中的属性数量。

但事实并非如此。它真的是一个数组 * 的对象 *。

因此,如果我们要填充该数组,则其中的元素必须是 * 对象 *。

SQL> CREATE OR REPLACE TYPE T1_OBJ AS OBJECT
  2  (field1 VARCHAR2(10),
  3   field2 INTEGER);
  4  /

Type created.

SQL>
SQL> CREATE OR REPLACE TYPE T1_TAB AS TABLE OF T1_OBJ;
  2  /

Type created.

SQL>
SQL> DECLARE
  2    v_t1 T1_TAB;
  3  BEGIN
  4    v_t1 := T1_TAB('Hernan',NULL);
  5  END;
  6  /
  v_t1 := T1_TAB('Hernan',NULL);
          *
ERROR at line 4:
ORA-06550: line 4, column 11:
PLS-00306: wrong number or types of arguments in call to 'T1_TAB'
ORA-06550: line 4, column 3:
PL/SQL: Statement ignored


SQL>
SQL>
SQL> DECLARE
  2    v_t1 T1_TAB;
  3  BEGIN
  4    v_t1 := T1_TAB(T1_OBJ('Hernan',NULL));
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL> DECLARE
  2    v_t1 T1_TAB;
  3  BEGIN
  4    v_t1 := T1_TAB(
  5                T1_OBJ('Hernan',NULL),
  6                T1_OBJ('Connor',5),
  7                T1_OBJ('Mike',10),
  8                T1_OBJ('Susie',NULL)
  9                );
 10  END;
 11  /

PL/SQL procedure successfully completed.


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论