Skip to main content

Command Palette

Search for a command to run...

Application - Utilities - Database Object Dependencies (Dependency Scan)

APEX 24.2.10

Published
3 min read
T

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