当将值插入Oracle SQL中的对象表中时,您如何声明嵌套对象?

发布于 2025-02-08 21:51:27 字数 819 浏览 3 评论 0原文

我正在尝试对象和嵌套表,以了解它们的工作方式。

我创建了三种对象类型 - 地址,属性和销售。地址嵌套在财产中,财产嵌套在销售中。然后,我创建了一张已销售的表 - 类型销售。

CREATE OR REPLACE TYPE ADDRESS AS OBJECT(
    line_1 VARCHAR2 (10),
    town VARCHAR2 (10),
    postcode VARCHAR2(10)
);

CREATE OR REPLACE TYPE PROPERTY AS OBJECT(
    location ADDRESS,
    description VARCHAR2(10)
);

CREATE OR REPLACE TYPE SALE AS OBJECT(
    house PROPERTY,
    sale_price NUMBER
);


CREATE TABLE SOLD OF SALE;

但是,当我尝试使用下面的任何括号组插入值时,我会出现“缺少右括号或“太多值”的错误。

INSERT INTO SOLD VALUES ((('1 MY ROAD', 'MYTOWN', 'MY123'), 'DESCRIPTION'), 100000);

INSERT INTO SOLD VALUES (('1 MY ROAD', 'MYTOWN', 'MY123', 'DESCRIPTION'), 100000);

INSERT INTO SOLD VALUES ('1 MY ROAD', 'MYTOWN', 'MY123', 'DESCRIPTION', 100000);

在这种情况下,分组嵌套对象以避免错误的正确方法是什么?

I'm experimenting with objects and nested tables to get an understanding of how they work.

I have created three objects types - Address, Property, and Sale. Address is nested in Property, and Property is nested in Sale. I have then created a Sold table - of type Sale.

CREATE OR REPLACE TYPE ADDRESS AS OBJECT(
    line_1 VARCHAR2 (10),
    town VARCHAR2 (10),
    postcode VARCHAR2(10)
);

CREATE OR REPLACE TYPE PROPERTY AS OBJECT(
    location ADDRESS,
    description VARCHAR2(10)
);

CREATE OR REPLACE TYPE SALE AS OBJECT(
    house PROPERTY,
    sale_price NUMBER
);


CREATE TABLE SOLD OF SALE;

However, when I try to insert values using any of the parenthesis groupings below, I get the error 'missing right parenthesis or' too many values'.

INSERT INTO SOLD VALUES ((('1 MY ROAD', 'MYTOWN', 'MY123'), 'DESCRIPTION'), 100000);

INSERT INTO SOLD VALUES (('1 MY ROAD', 'MYTOWN', 'MY123', 'DESCRIPTION'), 100000);

INSERT INTO SOLD VALUES ('1 MY ROAD', 'MYTOWN', 'MY123', 'DESCRIPTION', 100000);

In this context what is the correct way to group nested objects to avoid errors?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一页 2025-02-15 21:51:27

使用对象构造函数:

INSERT INTO sold (house, sale_price)
VALUES (
  property(
    address('1 MY ROAD', 'MYTOWN', 'MY123'),
    'DESCRIPTION'
  ),
  100000
);

或:

INSERT INTO sold 
VALUES (
  sale(
    property(
      address('1 MY ROAD', 'MYTOWN', 'MY123'),
      'DESCRIPTION'
    ),
    100000
  )
);

注意:描述是11个字符,因此它不会适合varchar2(10)属性。 减小字符串的大小。

要么增加属性的大小,要么 rdbms = oracle_18& fiddle = 839c6c8a72546e555b51dcb8ac336b0d2“ rel =“ nofollow noreferrer”>在这里

Use the object constructors:

INSERT INTO sold (house, sale_price)
VALUES (
  property(
    address('1 MY ROAD', 'MYTOWN', 'MY123'),
    'DESCRIPTION'
  ),
  100000
);

or:

INSERT INTO sold 
VALUES (
  sale(
    property(
      address('1 MY ROAD', 'MYTOWN', 'MY123'),
      'DESCRIPTION'
    ),
    100000
  )
);

Note: DESCRIPTION is 11 characters so it will not fit into a VARCHAR2(10) attribute. Either increase the size of the attribute or reduce the size of the string literal you are trying to put into the attribute.

db<>fiddle here

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文