Курсор внутри курсора

Мне нужна ваша помощь. Я пытаюсь сделать ряд курсоров внутри других курсоров. Ниже я покажу вам таблицы, с которыми я хочу сделать курсоры.

Сначала наведите курсор на первую таблицу, ищущую запись. Во-вторых, в таблице 1 у нас есть столбец "ID_ASI", с этим столбцом я хочу сделать еще один курсор, который ищет внутри другой таблицы (ИЗОБРАЖЕНИЕ ТАБЛИЦЫ 2) все "ID_ASI", которые он находит с тем же "ID_ASI".

Наконец, "ID_ASI" найдет на втором шаге создание нового курсора, который ищет все "ID_DOC" с одинаковым "ID_ASI". Например, на втором шаге при наведении курсора на столбец "ID_ASI" найдите 3 строки с одинаковым "ID" (101), затем на третьем шаге выполняется поиск всех "ID_DOC" с таким же "ID_ASI". Например, "ID_ASI" 101 имеет 3 "ID_DOC" (значение 10), 101 имеет 2 других значения (20) и, наконец, два других значения (30). Сложная вещь заключается в том, как сгруппировать их все одинаково и как поместить курсор внутри курсора.

Это будет результатом.

ИЗОБРАЖЕНИЕ РЕЗУЛЬТАТОВ ТАБЛИЦЫ 2

Спасибо за внимание.

2 ответа

Для меня это выглядит так, как будто вы хотите объединить столы, что-то вроде

SELECT t2.*
  FROM TABLE_1 t1
  INNER JOIN TABLE_2 t2
    ON t2.ID_ASI = t1.ID_ASI
  ORDER BY t2.ID_ASI, t2.ID_DOC

SQLFiddle здесь

Удачи.

Используйте иерархический запрос:

SQL Fiddle

Настройка схемы Oracle 11g R2:

CREATE TABLE TABLE_1 ( ID_ASI ) AS
  SELECT 101 FROM DUAL UNION ALL
  SELECT 201 FROM DUAL UNION ALL
  SELECT 301 FROM DUAL;

CREATE TABLE TABLE_2 (ID_ASI, ID_DOC, IMPORT, IMPORT_TO ) AS
  SELECT 101, 10, NULL, 1000 FROM DUAL UNION ALL
  SELECT 101, 20, NULL, 2000 FROM DUAL UNION ALL
  SELECT 101, 30, NULL, 3000 FROM DUAL UNION ALL
  SELECT 201, 23, NULL, 430 FROM DUAL UNION ALL
  SELECT 201, 23, 430, NULL FROM DUAL UNION ALL
  SELECT 104, 10, 500, NULL FROM DUAL UNION ALL
  SELECT 104, 20, 2000, NULL FROM DUAL UNION ALL
  SELECT 104, 10, 500, NULL FROM DUAL UNION ALL
  SELECT 104, 30, 3000, NULL FROM DUAL;

Запрос 1:

SELECT *
FROM   TABLE_2
START WITH ID_ASI IN ( SELECT ID_ASI FROM TABLE_1 )
CONNECT BY PRIOR ID_DOC = ID_DOC
AND PRIOR ID_ASI < ID_ASI
ORDER SIBLINGS BY 1, 2, 3, 4

Результаты:

| ID_ASI | ID_DOC | IMPORT | IMPORT_TO |
|--------|--------|--------|-----------|
|    101 |     10 | (null) |      1000 |
|    104 |     10 |    500 |    (null) |
|    104 |     10 |    500 |    (null) |
|    101 |     20 | (null) |      2000 |
|    104 |     20 |   2000 |    (null) |
|    101 |     30 | (null) |      3000 |
|    104 |     30 |   3000 |    (null) |
|    201 |     23 |    430 |    (null) |
|    201 |     23 | (null) |       430 |
Другие вопросы по тегам