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_cur_start varchar2(1024) := i_start_with;
l_parent_folder varchar2(1024) := f_normalize_prefix(i_parent_folder);
l_obj_path t_object_path;
c_page_size constant number := 1000;
begin
while not l_done
@@ -219,11 +220,14 @@ create or replace package body pck_net_storage as
)) jt
)
loop
l_obj_path := f_split_object_key(rec.object_name);
l_result.extend;
l_result(l_result.last) := t_net_storage_row(
rec.object_name
,l_obj_path.path
,l_obj_path.filename
-- 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 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)
@@ -249,10 +253,13 @@ create or replace package body pck_net_storage as
)) jt
)
loop
l_obj_path := f_split_object_key(rec.prefix_name);
l_result.extend;
l_result(l_result.last) := t_net_storage_row(
rec.prefix_name
,0
,l_obj_path.path
,l_obj_path.filename
,null
,null
,'Y'
,null
@@ -304,15 +311,15 @@ create or replace package body pck_net_storage as
-- level 2 → 'mandant/Eingang/'
-- 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.
-- prior sys_guid() is not null : verhindert Cycle-Detection-Fehler,
-- 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
where r.is_folder = 'N'
connect by level <= regexp_count(r.object_name, '/')
and prior r.object_name = r.object_name
connect by level <= regexp_count(r.object_key, '/')
and prior r.object_key = r.object_key
and prior sys_guid() is not null
)
-- 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
-- Zero-Byte-Objekte oder via $.prefixes gelieferte virtuelle Ordner).
minus
select object_name
select object_key
from table(l_result)
where is_folder = 'Y';
for i in 1..l_new_folders.count
loop
l_obj_path := f_split_object_key(l_new_folders(i));
l_result.extend;
l_result(l_result.last) := t_net_storage_row(
l_new_folders(i)
,0
,l_obj_path.path
,l_obj_path.filename
,null
,null
,'Y'
,null

View File

@@ -1,7 +1,9 @@
-- 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.
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
,last_modified date
,is_folder varchar2(1)