【问题标题】:Accessing Data inside an object that is in a VARRAY Oracle访问 VARRAY Oracle 中的对象内的数据
【发布时间】:2014-12-25 18:33:26
【问题描述】:

我是 PL/SQL 的新手,并且使用混合表,所以如果我遗漏了一些明显的东西,我很抱歉,我以为我已经完成了大部分主要内容。

我最近在尝试访问 OBJECT 类型的 VARRAY 中的数据时遇到了问题。

我正在尝试更改已存储在 VARRAY 类型对象中的对象中的一些数据,但一直遇到错误。我尝试访问的表中的列是使用 VARRAY 作为数据类型创建的。

我有一个对象:

CREATE TYPE MY_OBJECT AS OBJECT

MY_OBJECT 有两个值,DATE 和一个字符。

此对象随后用于将列的数据类型定义为 OBJECT 类型的 VARRAY:

CREATE TYPE MY_COLUMN AS VARRAY(100) of MY_OBJECT

我已经通过 Stackoverflow 上的两个帖子尝试解决我的问题,如下所列:

如何使用简单的更新语句更新表中的可变数组类型?

SQL Retrieving an object from VARRAY in Oracle 11g Database


这是我在通过这些尝试访问数据以便我可以更改它之后所拥有的。

UPDATE my_table SET my_column = (my_object(date), my_object('X'));

我也试过了

UPDATE my_table SET my_column = (date, 'X');

这两次尝试都会引发“缺少右括号”错误,因此我采用了不同的方法。

INSERT INTO my_table 
VALUES
( 
1, my_column(varray)(my_object(1, date, 'X'))
);

这会引发“没有足够的值”错误。

我的问题分为两部分:

1) 表格中总共有 60 列,为了解决这个“没有足够的值”错误,我必须为每列输入值吗?

我认为我可以直接访问该列,而无需处理我不需要访问的任何其他列。

2) 为了访问数组中的对象,单个对象调用(如我的第三次尝试)是否可行?

我希望只是尝试访问 my_column,访问 VARRAY,然后访问 VARRAY 中的对象,以便我可以根据需要在对象中添加或更改数据。

我认为这很简单,但我整天都在兜圈子。

任何建议将不胜感激!

【问题讨论】:

    标签: oracle object oracle11g varray


    【解决方案1】:
    1. 是的,如果使用默认构造函数,则必须输入所有值。
    2. 我需要有关您的插入语句上下文的更多信息。对于独立的INSERT,这是一个工作语法示例。

      CREATE TYPE MY_OBJECT AS OBJECT
      (
          a_date date,
          a_char varchar2(1)
      );
      
      CREATE TYPE MY_COLUMN AS VARRAY(100) of MY_OBJECT;
      
      create table my_table
      (
          col1 number,
          my_columns my_column
      );
      
      INSERT INTO my_table 
      VALUES(1, my_column(my_object(sysdate, 'X')));
      

    【讨论】:

    • 感谢您的帮助,您的洞察力使我找到了可行的方法。您可以使用 UPDATE my_table SET my_column SET = (my_array(my_object(TO_DATE('date','mm/dd/yyyy'),('X')));
    猜你喜欢
    • 2011-01-17
    • 2021-02-20
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    相关资源
    最近更新 更多