tmp SIMPLE_TYPEE := SIMPLE_TYPE(1, 'a');
…
IF tmp.EXISTS(tmp) THEN
Вы объявляете tmp
как SIMPLE_TYPE
, а не ObjectList
.
SIMPLE_TYPE
является скалярным типом, а не коллекцией.
Возможно, вы хотели проверить o.EXISTS
вместо этого (что является ObjectList
)?
Обновление:
EXISTS
при применении к коллекции принимает целочисленный индекс в качестве аргумента и проверяет, существует ли элемент с этим индексом (не его значение).
Чтобы проверить, что SIMPLE_TYPE(1, 'a')
существует в вашей таблице, вы должны сделать следующее:
Создать ObjectList
в словаре:
CREATE TYPE ObjectList IS TABLE OF SIMPLE_TYPE;
Выполните запрос SELECT
:
DECLARE
tmp SIMPLE_TYPE := SIMPLE_TYPE(1, 'a');
o ObjectList := new ObjectList(SIMPLE_TYPE(2, 'a'), SIMPLE_TYPE(3, 'a'));
myid INT;
BEGIN
SELECT 1
INTO myid
FROM TABLE(o) q
WHERE SIMPLE_TYPE(q.id, q.name) = tmp
AND rownum = 1;
IF (myid = 1) THEN
dbms_output.put_line('OK, exists.');
END IF;
END;