У меня есть пробелм в моем тесте PL SQL с Oracle 11g. Моя задача - скидка 20%, если аудио-CD выпущены более года назад. Я сделал это заявление
CREATE OR REPLACE TYPE BODY disk_type AS
OVERRIDING MEMBER FUNCTION discountPrice RETURN NUMBER IS
BEGIN
IF
albumReleaseDate > to_char(trunc(SYSDATE - interval '1' year,'YEAR'),'YYYYMM')
AND mediaType = 'Audio CD'
THEN RETURN albumPrice = (albumPrice * 0.8);
END IF;
END discountPrice;
END;
Однако я получил это сообщение об ошибке
7/15 PL/SQL: Statement ignored
7/33 PLS-00382: expression is of wrong type
В сообщениях говорится, что мой тип возвращаемых данных неверен
Это мой супертип
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),
albumArtists artist_array_type,
albumReviews review_table_type,
member function discountPrice return number,
member function containsText (pString1 varchar2, pString2 varchar2) return integer)
not instantiable not final
/
create table albums of album_type
object id system generated
/
Это мой подтип
create or replace type disk_type under album_type
( mediaType varchar(10), -- Audio CD wull be 'Audio CD'
diskNum number(2), -- number of disks
diskUsedPrice number(9,2),
diskDeliveryCost number(9,2),
overriding member function discountPrice return number)
/