Oracle使用包中定义的类型作为添加到已定义类型的表的记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle使用包中定义的类型作为添加到已定义类型的表的记录相关的知识,希望对你有一定的参考价值。
我有以下包裹。
CREATE OR REPLACE PACKAGE offer_actions AS
TYPE opis_oferty_type IS RECORD (nazwa varchar(11), rocznik number(4), cena decimal(10,2), imie_klienta varchar(32), nazwisko_klienta varchar(32));
TYPE opis_ofert_table IS TABLE OF varchar(100);
komis_id komisy.idk%TYPE :=0;
CURSOR c_oferty RETURN opis_oferty_type;
FUNCTION find_oferrs(komis_id number) RETURN opis_ofert_table;
END offer_actions;
/
CREATE OR REPLACE PACKAGE BODY offer_actions AS
CURSOR c_oferty RETURN opis_oferty_type IS
SELECT mar.nazwa, sze.rok_produkcji, ofe.cena_aktualna, kli.imie, kli.nazwisko FROM oferty ofe, szczegoly_oferty sze, modele modd, marki mar, klienci kli WHERE ofe.klient_id = kli.idk AND sze.oferta_id = ofe.idk AND ofe.model_id = modd.idk AND modd.marka_id = mar.idk AND ofe.komis_id = komis_id;
FUNCTION find_oferrs(komis_id number) RETURN opis_ofert_table IS
l_offers opis_ofert_table := opis_ofert_table();
BEGIN
FOR i in c_oferty LOOP
l_offers.EXTEND;
l_offers(l_offers.COUNT) := i.nazwa;
END LOOP;
RETURN l_offers;
END find_oferrs;
END offer_actions;
当我运行脚本时,我收到以下错误。
PLS-00222: no function with name 'OPIS_OFERTY_TYPE' exists in this scope
如何定义opis_oferty_type以允许在操作中添加新记录
l_offers(l_offers.COUNT) := (opis_oferty_type(i.nazwa,i.rocznik,i.cena,i.imie_klienta, i.nazwisko_klienta));
声明的类型。
CREATE OR REPLACE TYPE opis_oferty_type AS OBJECT
(nazwa varchar(11),
rocznik number(4),
cena decimal(10,2),
imie_klienta varchar(32),
nazwisko_klienta varchar(32)
);
/
CREATE OR REPLACE TYPE opis_ofert_table AS TABLE OF opis_oferty_type;
答案
您正在尝试使用类似对象类型的记录类型。不可能。
仅在SQL级别声明的对象类型,仅在PL / SQL级别记录类型。
使用opis_oferty_type
在SQL中创建类型create type ... as object
,或继续使用记录类型,但初始化记录的每个字段,如下所示:
Declare
l_v opis_oferty_type;
...
Begin
...
l_v.nazwa:= ...;
l_v.rocznik:= ...;
...
l_offers(l_offers.COUNT) := l_v;
这里有一对供参考的链接:Declaring Object Types,Initial Values of Record Variables
以上是关于Oracle使用包中定义的类型作为添加到已定义类型的表的记录的主要内容,如果未能解决你的问题,请参考以下文章