Недавно я развернул отображение Oracle WareHouse Builder (OWB). В сценарии, который я сейчас работаю, это сопоставление (процесс ETL) должно запускаться с помощью триггера после того, как оператор обновления имеет место в таблице фактов (работает со значениями WriteBack).Проблема с переменными привязки PL/SQL
Поскольку отображение развертывается в целевую схему как пакет, триггер должен вызывать основную процедуру, которую создает OWB для пакета. Сначала я не знал, как выполнить эту задачу, но SQL Developer дал мне подсказку:
Итак, я взял этот код и поместить его в мой курок. Как это:
CREATE OR REPLACE TRIGGER RESPALDO_HISTORIAL
AFTER UPDATE ON MONITOR_FT_TAB
FOR EACH ROW
DECLARE
P_STATUS VARCHAR2(200);
P_MAX_NO_OF_ERRORS VARCHAR2(200);
P_COMMIT_FREQUENCY VARCHAR2(200);
P_OPERATING_MODE VARCHAR2(200);
P_BULK_SIZE VARCHAR2(200);
P_AUDIT_LEVEL VARCHAR2(200);
P_PURGE_GROUP VARCHAR2(200);
P_JOB_AUDIT VARCHAR2(200);
BEGIN
P_MAX_NO_OF_ERRORS := NULL;
P_COMMIT_FREQUENCY := NULL;
P_OPERATING_MODE := NULL;
P_BULK_SIZE := NULL;
P_AUDIT_LEVEL := NULL;
P_PURGE_GROUP := NULL;
P_JOB_AUDIT := 'TRUE';
SINIESTROS_MARCADOS_MAP.MAIN(
P_STATUS => P_STATUS,
P_MAX_NO_OF_ERRORS => P_MAX_NO_OF_ERRORS,
P_COMMIT_FREQUENCY => P_COMMIT_FREQUENCY,
P_OPERATING_MODE => P_OPERATING_MODE,
P_BULK_SIZE => P_BULK_SIZE,
P_AUDIT_LEVEL => P_AUDIT_LEVEL,
P_PURGE_GROUP => P_PURGE_GROUP,
P_JOB_AUDIT => P_JOB_AUDIT
);
:P_STATUS := P_STATUS;
END RESPALDO_HISTORIAL;
/
Когда я попытался собрать этот триггер, я получил этот экран:
В этом окне я попытался нажав «Aplicar» (Применить на испанском языке) с и без NULL флажок, всегда получаю этот выход:
TRIGGER RESPALDO_HISTORIAL compilado
Errors: check compiler log
Тогда я побежал команду на ВЫСТАВКАХ ОШИБКИ, и я получил это:
33/3 PLS-00049: bad bind variable 'P_STATUS'
Теперь я не совсем понимаю эти переменные связывания. Если это код, созданный SQL Developer для запуска пакета, то почему я получаю эту ошибку?
Пожалуйста, помогите! Мне нужны рекомендации по этому вопросу! Приветствую!
Но если я это сделаю, как я могу быть уверен, что ETL будет работать правильно? Я имею в виду, помню, я не написал этот код. Он был создан SQL Developer. Разве это не тот же самый код OWB кода, который выполняется при выполнении ETL? –
Я не знаю, что именно делает ваш пакет или почему вы вызываете его в триггер. Я ответил на конкретный вопрос, который вы задали. Если вам нужно что-то узнать, измените свой вопрос или опубликуйте новый. Но будьте конкретны. «Как я могу быть уверен, что это будет выполнено правильно?» слишком широк, чтобы получить полезный ответ. – Allan