PL / SQL绑定变量的问题

时间:2014-12-02 15:44:14

标签: plsql oracle11g oracle-sqldeveloper

最近,我部署了Oracle WareHouse Builder(OWB)映射。在我现在正在工作的场景中,在事件表上发生Update语句(使用WriteBack值)之后,需要通过触发器触发此映射(ETL过程)。

当映射作为包部署到目标模式时,触发器必须调用OWB为包创建的主过程。起初我并不知道如何完成这项任务,但SQL Developer给了我一个提示:

enter image description here

所以,我把这个代码放在我的触发器中。像这样:

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;
/

当我尝试编译此触发器时,我得到了这个屏幕:

enter image description here

在此屏幕中,我尝试点击" Aplicar" (使用西班牙语)有和没有NULL复选框,总是得到这个输出:

TRIGGER RESPALDO_HISTORIAL compilado
Errors: check compiler log

然后我运行了SHOW ERRORS命令,我得到了这个:

33/3           PLS-00049: bad bind variable 'P_STATUS'

现在我不太了解这些绑定变量。如果这是SQL Developer生成的用于运行包的代码,那么为什么我会收到此错误?

请帮忙!在这件事上我需要一些指导! 问候!

1 个答案:

答案 0 :(得分:1)

变量前面的冒号表示该变量是绑定变量。此类型的绑定变量通常用于将值传入和传出匿名块。它们不允许在程序,函数或触发器中使用。在这种情况下,您需要删除行:P_STATUS := P_STATUS;