#function #plsql #database-cursor
#функция #plsql #база данных-курсор
Вопрос:
У меня есть функция с курсором, которая возвращает идентификатор. Мне нужно получить некоторые поля в другом курсоре, используя этот результат ID от первого курсора.
Итак, мой первый курсор:
CREATE OR REPLACE function get_id(id number)
CURSOR child_id
IS
SELECT table1_id
FROM table1,child
WHERE child_id = id
AND table1_id = child_chld_id;
В идеале мой второй курсор должен быть:
cursor grandchild_id
is
select table1_id from table1,child
where child_id = (return value of id from cursor child_id)
and table1_id = child_chld_id;
Как мне это сделать?
Комментарии:
1. @Anne — Спасибо за редактирование. Я никогда не могу понять, как это сделать!!
2. В основном: вставьте код, выберите код, нажмите
{}
кнопку и убедитесь, что строка выше пуста. Надеюсь, это поможет!3. Почему бы вам не объединить их в один запрос? Очень вероятно, что это будет намного эффективнее.
Ответ №1:
Курсоры могут принимать параметры:
cursor grandchild_id(other_child_id number)
is
select table1_id from table1,child
where child_id = grandchild_id.other_child_id
and table1_id = child_chld_id;
Всякий раз, когда вы открываете grandchild_id
курсор, просто передавайте соответствующее значение в качестве аргумента:
grandchild_id(the_value_you_obtained_from_the_first_cursor)
Комментарии:
1. Я буду использовать это в Oracle discoverer, где оно будет выполняться для всех идентификаторов в базе данных … как это будет работать в этом случае? Спасибо за ответ
2. @Cindy: Я не знаю. Возможно, вы захотите отредактировать свой вопрос, чтобы включить тот факт, что вы используете Discoverer.