Не се нуждаете от вътрешно свързване към фиктивна таблица или аналитична функция, за да генерирате номерата на редовете; можете просто да използвате свързване чрез (и съответната му функция за ниво) на самата таблица, така:
WITH tst_dim_ban_selected AS (SELECT 1 ban_key, 'a' cust_fullname, 3 n FROM dual UNION ALL
SELECT 2 ban_key, 'b' cust_fullname, 4 n FROM dual)
-- end of mimicking your table with data in it. See SQL below
SELECT db.ban_key,
db.cust_fullname,
LEVEL row_num
FROM tst_dim_ban_selected db
CONNECT BY LEVEL <= db.n
AND PRIOR db.ban_key = db.ban_key -- assuming this is the primary key
AND PRIOR sys_guid() IS NOT NULL;
BAN_KEY CUST_FULLNAME ROW_NUM
---------- ------------- ----------
1 a 1
1 a 2
1 a 3
2 b 1
2 b 2
2 b 3
2 b 4
Ако имате други колони освен ban_key в първичния ключ на таблицата, трябва да се уверите, че те са включени в списъка на клаузата за свързване от prior <column> = <column>
с. Това е така, че свързването чрез може да идентифицира всеки ред уникално, което означава, че се зацикля само върху този ред и няма други. PRIOR sys_guid() IS NOT NULL
се изисква, за да се предотврати възникването на свързване чрез цикли.