Application - Utilities - Database Object Dependencies (Dependency Scan)
APEX 24.2.10
Databaseguy, Oracle Apex Lover
Seit der Dependency Scan in Apex verfügbar ist nutzen wir ihn vor jeder Release und vermeiden dadurch in unserem Share-Devteam unnötige Fehler im Zusammenhang zwischen DB + View Layer + Packages..
Es gibt aber ein paar issues in dieser Sache..
Fall 1:
In einer Region Query nutzen wir die DEFAULT ON CONVERSION Syntax:
Der Scan sagt dann..
PL/SQL: ORA-43907: Argument in DEFAULT ... ON CONVERSION ERROR clause must be a literal or bind variable. [line 24]
PL/SQL: SQL Statement ignored [line 1]
Die Query in der Region Source:
SELECT *
FROM TABLE(
APEX_DATA_PARSER.parse(
p_content => (select FILE_BLOB from zodis_erp_base.zodis_uploads
where zodis_uploads_oid = :P13016_ZODIS_UPLOADS_OID),
p_file_name => :P13016_FILENAME
)
) newdata
LEFT join lbc on (
CAST(newdata.col020 AS NUMBER DEFAULT -1 ON CONVERSION ERROR) = lbc.bestellnr
and
CAST(newdata.col021 AS NUMBER DEFAULT -1 ON CONVERSION ERROR) = lbc.artikelnr
and
newdata.col007 = lbc.containernummer
and CAST(newdata.col022 AS NUMBER DEFAULT -1 ON CONVERSION ERROR) = lbc.containerstueck
)
where col007 is not null
and newdata.line_number > 3
;
Wenn man die Page aufruft, funktioniert sie aber einwandfrei.
Fall 2:
Manchmal bekommen wir bei einem Packagaufruf im Rahmen des Scans auch PLS-00801 Fehler:
PLS-00801: internal error [56402] [line 0]
PL/SQL: ORA-06544: PL/SQL: internal error, arguments: [56402], [], [], [], [], [], [], [] [line 10]
PL/SQL: SQL Statement ignored [line 1]
Die Region Query:
SELECT * FROM p13202_data_filtering(
-- Date parameters
p_verkauft_von => TO_DATE(:P13202_VERKAUFT_VON, 'DD.MM.YYYY'),
p_verkauft_bis => TO_DATE(:P13202_VERKAUFT_BIS, 'DD.MM.YYYY'),
p_eingeloest_von => TO_DATE(:P13202_EINGELOEST_VON, 'DD.MM.YYYY'),
p_eingeloest_bis => TO_DATE(:P13202_EINGELOEST_BIS, 'DD.MM.YYYY'),
-- Voucher type parameters
p_alte_gutscheine => NVL(:P13202_ALTE_GUTSCHEINE, 0),
p_neue_gutscheine => NVL(:P13202_NEUE_GUTSCHEINE, 0),
p_news_gutscheine => NVL(:P13202_NEWS_GUTSCHEINE, 0),
-- Credit type parameters
p_alte_gutschriften => NVL(:P13202_ALTE_GUTSCHRIFTEN, 0),
p_neue_gutschriften => NVL(:P13202_NEUE_GUTSCHRIFTEN, 0),
-- Branch parameters
p_filiale_be => NVL(:P13202_FILIALE_BE, 0),
p_filiale => TO_NUMBER(:P13202_FILIALE),
p_fil_verk_eing => NVL(:P13202_FIL_VERK_EING, 0),
-- Article number parameters
p_artnr_be => NVL(:P13202_ARTNR_BE, 0),
p_artnr => TO_NUMBER(:P13202_ARTNR),
-- Other parameters
p_gutscheinnr => :P13202_GUTSCHEINNR,
p_summen1023 => NVL(:P13202_SUMMEN1023, 0)
);
Ein SQL Macro
create or replace FUNCTION p13202_data_filtering(
-- Voucher type parameters
p_alte_gutscheine IN NUMBER DEFAULT 0,
p_neue_gutscheine IN NUMBER DEFAULT 0,
p_news_gutscheine IN NUMBER DEFAULT 0,
-- Credit type parameters
p_alte_gutschriften IN NUMBER DEFAULT 0,
p_neue_gutschriften IN NUMBER DEFAULT 0,
-- Branch parameters
p_filiale_be IN NUMBER DEFAULT 0,
p_fil_verk_eing IN NUMBER DEFAULT 0,
p_filiale IN NUMBER DEFAULT NULL,
-- Article number parameters
p_artnr_be IN NUMBER DEFAULT 0,
p_artnr IN NUMBER DEFAULT NULL,
-- Date parameters
p_verkauft_von IN DATE DEFAULT NULL,
p_verkauft_bis IN DATE DEFAULT NULL,
p_eingeloest_von IN DATE DEFAULT NULL,
p_eingeloest_bis IN DATE DEFAULT NULL,
-- Other parameters
p_gutscheinnr IN VARCHAR2 DEFAULT NULL,
p_summen1023 IN NUMBER DEFAULT 0
) RETURN CLOB SQL_MACRO
AS
BEGIN
RETURN q'[SELECT
CASE WHEN VALIDATE_CONVERSION(g."CRNCODE" AS NUMBER) = 1
THEN TO_NUMBER(g."CRNCODE")
ELSE NULL
END AS "CRNCODE_NR",
....
FROM
art_gutscheine g
WHERE
....
.... )]';
END;
/
Maybe a Validation Error again?
Wenn man die Page aufruft, funktioniert auch diese einwandfrei.
Fall 3:
Der Scan hat auch Probleme wenn man in einer dynamic action einen javascript error hat..
(hier falsch auskommentiert)
dann kommt es auch zu interessanten problemen.
$('#MAINREGION').css({
//'background': 'repeating-linear-gradient(45deg, orange, orange, 30px, white 30px, white 80px)'
'background-color':'orange' });
Führt zu diesem Effect: ORA-06553: PLS-103: Encountered the symbol ““ ..

Wenn man auch diese Page aufruft funktionierte sie einwandfrei, trotz des JS welches nicht richtig auskommentiert wurde..
Thx for attention