【问题标题】:Oracle, EXTENDS mus be declaredOracle, EXTEND 必须声明
【发布时间】:2018-01-16 18:19:14
【问题描述】:

我正在尝试在 Oracle 中创建对象数据类型。 我有一个名为 type_transaction 的对象类型,我使用这种类型的主体 扩展功能。 编译器崩溃以下错误: “必须声明标识符‘EXTENDS’。 我不知道我做错了什么

这是类型:

    CREATE OR REPLACE TYPE type_transakcja AS OBJECT
    (
      id_transakcji NUMBER(10),
      data_transakcji DATE,
      pracownika_id REF type_pracownik,
      klient_id REF type_klienta,
      produkt_id REF type_produkt,
      zamowienia k_zamowienie,
      MAP MEMBER FUNCTION odwzoruj RETURN NUMBER,
      MEMBER FUNCTION wartosc_zamowienia RETURN NUMBER,
      MEMBER FUNCTION transakcja(produkty REF type_produkt, ile NUMBER) 
      RETURN NUMBER,
      MEMBER PROCEDURE anuluj,
      MEMBER PROCEDURE zatwierdz
      );

      CREATE TYPE k_zamowienie AS TABLE OF type_sprzedaz;

这是类型的主体

      CREATE OR REPLACE TYPE BODY type_transakcja IS

      MEMBER FUNCTION transakcja(produkty REF type_produkt, ile NUMBER) 
      RETURN NUMBER IS
      i INTEGER;
      t k_zamowienie;
      p type_produkt;
      BEGIN
      SELECT DEREF(produkty) INTO p FROM DUAL;
      IF p.ilosc_magazynowa - ile >=0 THEN
      p.ilosc_magazynowa:=p.ilosc_magazynowa-ile;
      t:=SELF.zamowienia;
      t:=extend(1);
      i:= SELF.zamowienia.last();
      t(i).ilosc:=ile;
      t(i).cena:=SELF.wartosc_zamowienia();
      t(i).produkt_id:=produkty;
      RETURN 1;
      ELSE
      RETURN 0;
      END IF;
      END;

      END;

【问题讨论】:

  • 请尝试建立minimal reproducible example,以便我们试用您的代码,了解问题并更好地帮助您。
  • 它实际上是在说“扩展”还是“扩展”?

标签: oracle object-oriented-database


【解决方案1】:

很难从您提供的有限信息中确定,而且您得到的实际错误似乎并不完全是;但看起来您只是错误地扩展了您的收藏。

假设k_zamowienie 是一个表类型,你正在做:

t:=extend(1);

代替:

t.extend(1);

你并不真的需要i,如果你有它,你的索引将是一个关闭(因为它基于原始表的大小,而不是克隆和扩展的);你可以这样做:

  t(t.last).ilosc:=ile;
  t(t.last).cena:=SELF.wartosc_zamowienia();
  t(t.last).produkt_id:=produkty;

但即使那样你也没有对t 做任何事情,所以这似乎有点毫无意义。也许你是这个意思?

  zamowienia.extend(1);
  zamowienia(zamowienia.last()).ilosc:=ile;
  zamowienia(zamowienia.last()).cena:=SELF.wartosc_zamowienia();
  zamowienia(zamowienia.last()).produkt_id:=produkty;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多