Я новичок в oracle и plsql и обычно пишу на python.Мне нужно создать функции-члены под подтипами и не понимаю, на что ссылаются ошибки PLS-00538 и PLS-00539.Вот мой код:
create or replace type album_type as object
(albumTitle varchar(50),
albumPlaytime number(3), -- minutes
albumReleaseDate date,
albumGenre varchar(15),
albumPrice number(9,2),
albumTracks number(2),
member function discountPrice return number)
return integer)
not instantiable not final
/
create or replace type disk_type under album_type
( mediaType varchar(10),
diskNum number(2), -- number of disks
diskUsedPrice number(9,2),
diskDeliveryCost number(9,2),
overriding member function discountPrice return number)
/
create or replace type mp3_type under album_type
(downloadSize number, -- size in MB
overriding member function discountPrice return number)
/
В настоящее время я просто пытаюсь скомпилировать типы тела, чтобы попытаться отладить свои ошибки.Приведенный ниже код работает, но не является положительным, это правильно:
create or replace type body album_type as
member function discountPrice return number is
begin
return albumprice;
end discountPrice;
end;
/
Однако при применении того же к подтипу это выдает ошибки: 1) PLS-00539: в объекте объявлена подпрограмма «DISCOUNTPRICE»тело типа и должно быть определено в спецификации типа объекта.2) PLS-00538: подпрограмма или курсор «DISCOUNTPRICE» объявлены в спецификации типа объекта и должны быть определены в теле типа объекта
create or replace type body disk_type as
member function discountPrice return number is
discount number;
begin
discount:= round(albumprice - albumprice*0.20,0);
return discount;
end discountPrice;
end;
/
В конечном счете, я хочу, чтобы функция предоставила скидку 20%.По логике это было бы:
if mediaType == 'Audio_CD':
price = albumprice - albumprice*0.20