Einzelne Rückgabe von Object Namen und Object Path hinzugefügt
This commit is contained in:
@@ -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,16 +311,16 @@ 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,
|
||||
-- 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
|
||||
and prior sys_guid() is not null
|
||||
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:
|
||||
-- like-Bedingung schließt Vorfahren-Pfade aus (z.B. 'mandant/', 'mandant/Eingang/'
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user