J'essaye de construire une procédure d'ODI, qui prendra le nom de schéma, le nom de procédure de DB et les paramètres d'une table de métadonnées de base de données d'oracle. Le champ de paramètre contient le nom d'une commande globale ODI source variable.Appareil est comme cePuis-je appeler une variable globale dans la variable source dans ODI?
SELECT SCHEMA_NAME VAR_SCHEMA, PROCEDURE_NAME VAR_PROCEDURE, PARAMETER_NAME
VAR_PARAMETER FROM SCHEMA-NAME.TABLE_NAME
la sortie de la commande source est comme ceci:
VAR_SCHEMA_NAME VAR_TABLE_NAME VAR_PARAMETER
ABC PROC_LIST TO_DATE('#VAR_ETL_LOAD_DATE','DD/MM/RRRR')
Ici, #VAR_ETL_LOAD_DATE est une variable globale en ODI.
Dans la commande cible de la procédure, je souhaite utiliser ces informations provenant de la commande source pour exécuter les procédures répertoriées dans la table de métadonnées. J'ai écrit une commande comme ceci:
DECLARE
VVC_SQL_STMT LONG;
BEGIN
VVC_SQL_STMT := 'BEGIN
#VAR_SCHEMA_NAME.#VAR_PROCEDURE_NAME(#VAR_PARAMETER);
END;';
INSERT INTO AK_TST2 VALUES(VVC_SQL_STMT,SYSDATE);
COMMIT;
EXECUTE IMMEDIATE (VVC_SQL_STMT);
END;
Ce code donne l'erreur suivante dans ODI:
ODI-1228: Task PROC_SP_HANDLER (Procedure) fails on the target ORACLE
connection OCDM_SYS.
Caused By: java.sql.SQLException: ORA-06550: line 8, column 61:
PLS-00103: Encountered the symbol "#" when expecting one of the following:
* & = - + ; </> at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
Quelle est les raisons de cela et comment puis-je exécuter des procédures stockées dans ODI en lisant les noms de procédure et paramètres d'une table de métadonnées?