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_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,16 +311,16 @@ 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:
|
||||||
-- like-Bedingung schließt Vorfahren-Pfade aus (z.B. 'mandant/', 'mandant/Eingang/'
|
-- 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
|
-- 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
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user