Использование / вызов курсора в другом курсоре — PL/Sql

#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.