【问题标题】:How to update subtype attribute values in oracle database?如何更新 oracle 数据库中的子类型属性值?
【发布时间】:2019-05-27 12:41:09
【问题描述】:

如何更新子类型的列值?

这样的代码无法访问学生的成绩属性:

update persons set grade = 'graduated';
CREATE OR REPLACE TYPE person (
    name varchar2(20),
    age number,
    address varchar2(20)
) NOT FINAL;

CREATE OR REPLACE TYPE student UNDER person (
    grade varchar2(20)
) NOT FINAL;

CREATE TABLE persons OF person;

INSERT INTO persons VALUES (student('Jon', 'undergraduate'));

如何将学生成绩更改为“已毕业”?

【问题讨论】:

  • 你的人没有属性grade
  • 如果您使用以下方式查询: select Treat(value(s) as student) from persons s;你可以看到它有属性grade;

标签: database oracle plsql object-relational-model


【解决方案1】:

我找到了问题的答案。
这是更新子类型属性的代码:

DECLARE
    s student;

BEGIN
    select treat(value(p) as student) into s from persons p where name = 'Jon';
    s.grade = 'graduated';
    update persons p set value(p) = s where name = 'Jon';
END;

【讨论】:

    【解决方案2】:

    应该可以的

    update persons s set VALUE(s) = student(treat(value(s) as student).name, 'graduated');
    

    【讨论】:

    • 如果我有更多的专栏?
    • 更多列在学生构造函数内部传递
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多