This commit is contained in:
Jan Kvetina 2022-01-11 20:50:34 +01:00
parent 625df6f8fe
commit b782209d4b
2 changed files with 117 additions and 58 deletions

View File

@ -44,6 +44,11 @@ CREATE OR REPLACE PACKAGE app_actions AS
-- ### Navigation page
--
--
-- Remove missing pages from NAVIGATION table
--
@ -69,6 +74,13 @@ CREATE OR REPLACE PACKAGE app_actions AS
-- ### User Roles page
--
--
--
--
@ -137,6 +149,13 @@ CREATE OR REPLACE PACKAGE app_actions AS
-- ### Settings page
--
--
-- Get value from Settings table
--
@ -238,6 +257,13 @@ CREATE OR REPLACE PACKAGE app_actions AS
-- ### Views source table
--
--
-- Refresh views source (convert views source to lines)
--
@ -245,6 +271,27 @@ CREATE OR REPLACE PACKAGE app_actions AS
PROCEDURE clob_to_lines (
in_name VARCHAR2,
in_clob CLOB
);
-- ### E-mails
--
FUNCTION clob_to_blob (
in_clob CLOB
)
RETURN BLOB;
--
-- Send UTF_8 email with compressed attachements
--

View File

@ -752,43 +752,6 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
AS
PRAGMA AUTONOMOUS_TRANSACTION;
--
PROCEDURE clob_to_lines (
in_name VARCHAR2,
in_clob CLOB
) AS
clob_len PLS_INTEGER := DBMS_LOB.GETLENGTH(in_clob);
clob_line PLS_INTEGER := 1;
offset PLS_INTEGER := 1;
amount PLS_INTEGER := 32767;
buffer VARCHAR2(32767);
BEGIN
WHILE offset < clob_len LOOP
IF INSTR(in_clob, CHR(10), offset) = 0 THEN
amount := clob_len - offset + 1;
ELSE
amount := INSTR(in_clob, CHR(10), offset) - offset;
END IF;
--
IF amount = 0 THEN
buffer := '';
ELSE
DBMS_LOB.READ(in_clob, amount, offset, buffer);
END IF;
--
INSERT INTO user_source_views (name, line, text)
VALUES (
in_name,
clob_line,
REPLACE(REPLACE(buffer, CHR(13), ''), CHR(10), '')
);
--
clob_line := clob_line + 1;
IF INSTR(in_clob, CHR(10), offset) = clob_len THEN
buffer := '';
END IF;
offset := offset + amount + 1;
END LOOP;
END;
BEGIN
app.log_module();
--
@ -801,7 +764,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
FROM user_views v
) LOOP
DBMS_OUTPUT.PUT_LINE(c.view_name);
clob_to_lines(c.view_name, REGEXP_REPLACE(c.content, '^(\s*)', ''));
app_actions.clob_to_lines(c.view_name, REGEXP_REPLACE(c.content, '^(\s*)', ''));
END LOOP;
--
COMMIT;
@ -818,6 +781,74 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
PROCEDURE clob_to_lines (
in_name VARCHAR2,
in_clob CLOB
)
AS
clob_len PLS_INTEGER := DBMS_LOB.GETLENGTH(in_clob);
clob_line PLS_INTEGER := 1;
offset PLS_INTEGER := 1;
amount PLS_INTEGER := 32767;
buffer VARCHAR2(32767);
BEGIN
WHILE offset < clob_len LOOP
IF INSTR(in_clob, CHR(10), offset) = 0 THEN
amount := clob_len - offset + 1;
ELSE
amount := INSTR(in_clob, CHR(10), offset) - offset;
END IF;
--
IF amount = 0 THEN
buffer := '';
ELSE
DBMS_LOB.READ(in_clob, amount, offset, buffer);
END IF;
--
--
-- CREATE COLLECTION INSTEAD
-- RETURN
--
INSERT INTO user_source_views (name, line, text)
VALUES (
in_name,
clob_line,
REPLACE(REPLACE(buffer, CHR(13), ''), CHR(10), '')
);
--
clob_line := clob_line + 1;
IF INSTR(in_clob, CHR(10), offset) = clob_len THEN
buffer := '';
END IF;
--
offset := offset + amount + 1;
END LOOP;
END;
FUNCTION clob_to_blob (
in_clob CLOB
)
RETURN BLOB
AS
out_blob BLOB;
--
v_file_size INTEGER := DBMS_LOB.LOBMAXSIZE;
v_dest_offset INTEGER := 1;
v_src_offset INTEGER := 1;
v_blob_csid NUMBER := DBMS_LOB.DEFAULT_CSID;
v_lang_context NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
v_warning INTEGER;
v_length NUMBER;
BEGIN
DBMS_LOB.CREATETEMPORARY(out_blob, TRUE);
DBMS_LOB.CONVERTTOBLOB(out_blob, in_clob, v_file_size, v_dest_offset, v_src_offset, v_blob_csid, v_lang_context, v_warning);
RETURN out_blob;
END;
PROCEDURE send_mail (
in_to VARCHAR2,
in_subject VARCHAR2,
@ -871,25 +902,6 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
END IF;
END;
--
FUNCTION clob_to_blob (
in_clob CLOB
)
RETURN BLOB AS
out_blob BLOB;
--
v_file_size INTEGER := DBMS_LOB.LOBMAXSIZE;
v_dest_offset INTEGER := 1;
v_src_offset INTEGER := 1;
v_blob_csid NUMBER := DBMS_LOB.DEFAULT_CSID;
v_lang_context NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
v_warning INTEGER;
v_length NUMBER;
BEGIN
DBMS_LOB.CREATETEMPORARY(out_blob, TRUE);
DBMS_LOB.CONVERTTOBLOB(out_blob, in_clob, v_file_size, v_dest_offset, v_src_offset, v_blob_csid, v_lang_context, v_warning);
RETURN out_blob;
END;
--
PROCEDURE split_addresses (
in_out_conn IN OUT NOCOPY UTL_SMTP.CONNECTION,
in_to IN VARCHAR2
@ -964,7 +976,7 @@ CREATE OR REPLACE PACKAGE BODY app_actions AS
UTL_SMTP.WRITE_DATA(conn, 'Content-Type: ' || 'application/octet-stream' || UTL_TCP.CRLF);
UTL_SMTP.WRITE_DATA(conn, 'Content-Disposition: attachment; filename="' || in_attach_name || '.gz"' || UTL_TCP.CRLF || UTL_TCP.CRLF);
--
blob_content := clob_to_blob(in_attach_data);
blob_content := app_actions.clob_to_blob(in_attach_data);
DBMS_LOB.CREATETEMPORARY(blob_gzipped, TRUE, DBMS_LOB.CALL);
DBMS_LOB.OPEN(blob_gzipped, DBMS_LOB.LOB_READWRITE);
--