Einzelne Rückgabe von Object Namen und Object Path hinzugefügt

This commit is contained in:
2026-04-10 14:18:15 +02:00
parent e4966a65c9
commit 4783baa71b
2 changed files with 23 additions and 11 deletions

View File

@@ -187,6 +187,7 @@ create or replace package body pck_net_storage as
l_done boolean := false; l_done boolean := false;
l_cur_start varchar2(1024) := i_start_with; l_cur_start varchar2(1024) := i_start_with;
l_parent_folder varchar2(1024) := f_normalize_prefix(i_parent_folder); l_parent_folder varchar2(1024) := f_normalize_prefix(i_parent_folder);
l_obj_path t_object_path;
c_page_size constant number := 1000; c_page_size constant number := 1000;
begin begin
while not l_done while not l_done
@@ -219,11 +220,14 @@ create or replace package body pck_net_storage as
)) jt )) jt
) )
loop loop
l_obj_path := f_split_object_key(rec.object_name);
l_result.extend; l_result.extend;
l_result(l_result.last) := t_net_storage_row( l_result(l_result.last) := t_net_storage_row(
rec.object_name rec.object_name
,l_obj_path.path
,l_obj_path.filename
-- Explizit angelegte Ordner sind Zero-Byte-Objekte mit trailing /; -- Explizit angelegte Ordner sind Zero-Byte-Objekte mit trailing /;
-- size und last_modified sind für Ordner nicht relevant -- size, last_modified und etag sind für Ordner nicht relevant
,(case when rec.object_name like '%/' then null else rec.object_size end) ,(case when rec.object_name like '%/' then null else rec.object_size end)
,(case when rec.object_name like '%/' then null else to_date(substr(rec.last_modified, 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS') end) ,(case when rec.object_name like '%/' then null else to_date(substr(rec.last_modified, 1, 19), 'YYYY-MM-DD"T"HH24:MI:SS') end)
,(case when rec.object_name like '%/' then 'Y' else 'N' end) ,(case when rec.object_name like '%/' then 'Y' else 'N' end)
@@ -249,10 +253,13 @@ create or replace package body pck_net_storage as
)) jt )) jt
) )
loop loop
l_obj_path := f_split_object_key(rec.prefix_name);
l_result.extend; l_result.extend;
l_result(l_result.last) := t_net_storage_row( l_result(l_result.last) := t_net_storage_row(
rec.prefix_name rec.prefix_name
,0 ,l_obj_path.path
,l_obj_path.filename
,null
,null ,null
,'Y' ,'Y'
,null ,null
@@ -304,15 +311,15 @@ create or replace package body pck_net_storage as
-- level 2 → 'mandant/Eingang/' -- level 2 → 'mandant/Eingang/'
-- level 3 → 'mandant/Eingang/batch-001/' -- level 3 → 'mandant/Eingang/batch-001/'
-- --
-- prior object_name = object_name : bindet jede Zeile an sich selbst, -- prior object_key = object_key : bindet jede Zeile an sich selbst,
-- damit connect by die Levels pro Zeile unabhängig hochzählt. -- damit connect by die Levels pro Zeile unabhängig hochzählt.
-- prior sys_guid() is not null : verhindert Cycle-Detection-Fehler, -- prior sys_guid() is not null : verhindert Cycle-Detection-Fehler,
-- da keine echte Eltern-Kind-Beziehung vorliegt. -- da keine echte Eltern-Kind-Beziehung vorliegt.
select substr(r.object_name, 1, instr(r.object_name, '/', 1, level)) as folder_path select substr(r.object_key, 1, instr(r.object_key, '/', 1, level)) as folder_path
from table(l_result) r from table(l_result) r
where r.is_folder = 'N' where r.is_folder = 'N'
connect by level <= regexp_count(r.object_name, '/') connect by level <= regexp_count(r.object_key, '/')
and prior r.object_name = r.object_name and prior r.object_key = r.object_key
and prior sys_guid() is not null and prior sys_guid() is not null
) )
-- Nur Pfade unterhalb des Parent-Folders behalten: -- Nur Pfade unterhalb des Parent-Folders behalten:
@@ -326,16 +333,19 @@ create or replace package body pck_net_storage as
-- Bereits vorhandene Ordner-Einträge ausschließen (explizit angelegte -- Bereits vorhandene Ordner-Einträge ausschließen (explizit angelegte
-- Zero-Byte-Objekte oder via $.prefixes gelieferte virtuelle Ordner). -- Zero-Byte-Objekte oder via $.prefixes gelieferte virtuelle Ordner).
minus minus
select object_name select object_key
from table(l_result) from table(l_result)
where is_folder = 'Y'; where is_folder = 'Y';
for i in 1..l_new_folders.count for i in 1..l_new_folders.count
loop loop
l_obj_path := f_split_object_key(l_new_folders(i));
l_result.extend; l_result.extend;
l_result(l_result.last) := t_net_storage_row( l_result(l_result.last) := t_net_storage_row(
l_new_folders(i) l_new_folders(i)
,0 ,l_obj_path.path
,l_obj_path.filename
,null
,null ,null
,'Y' ,'Y'
,null ,null

View File

@@ -1,7 +1,9 @@
-- Schema-Level Type für f_list_objects Cursor-Rückgabe. -- Schema-Level Type für f_list_objects Cursor-Rückgabe.
-- Wird benötigt da Oracle TABLE() in SQL nur schema-level Types unterstützt. -- Wird benötigt da Oracle TABLE() in SQL nur schema-level Types unterstützt.
create or replace type t_net_storage_row as object ( create or replace type t_net_storage_row as object (
object_name varchar2(1024) object_key varchar2(1024)
,object_path varchar2(1024)
,name varchar2(256)
,object_size number ,object_size number
,last_modified date ,last_modified date
,is_folder varchar2(1) ,is_folder varchar2(1)