预期效果不佳

时间:2012-07-12 09:06:54

标签: oracle10g procedure

我有两张这样的表

  

FLUX_ISU_EQU

ID  NUMBER(38,0)
EQU_CODE    VARCHAR2(10 BYTE)
DATE_DERNIERE_MODIF DATE
  

FLUX_ISU_EQU_AFF_TAB

ID  NUMBER(38,0)
EQU_ID  NUMBER(38,0)
DATE_DEBUT  DATE
DATE_FIN    DATE
TYPE_EQU    VARCHAR2(10 BYTE)
CODE_REGION VARCHAR2(10 BYTE)

我的表格中有数据如下:

  

FLUX_ISU_EQU

enter image description here

  

FLUX_ISU_EQU_AFF_TAB

enter image description here

我有一个这样的程序:

PROCEDURE DONNEES_IS_PRESENT(equ_id IN NUMBER, isCheckDonnees IN OUT BOOLEAN) IS
nbEquipement NUMBER;
BEGIN
nbEquipement := 0;
select count(*) into nbEquipement from flux_isu_equ_aff_tab fieat, flux_isu_equ fie where fieat.EQU_ID = fie.id AND fie.id = equ_id;
  IF nbEquipement = 0 THEN
    isCheckDonnees := false;
    Pk_Compas_Util.LOG_ERROR('Pk_Compas_Flux_Isu.IMPORT_EQUIPEMENT_EAI', 'IMPORT_EQUIPEMENT_EAI', equ_id, NULL, NULL, 'Acune correspondance pour l''id '''||equ_id||''' dans la table FLUX_ISU_EQU_AFF_TAB', NULL);
  END IF;
END;

那么,为什么当我执行我的程序时nbEquipement = 3而不是nbEquipement = 1.

为什么..?

PS:当我做的时候

select count(*)  from flux_isu_equ_aff_tab fieat, flux_isu_equ fie where fieat.EQU_ID = fie.id AND fie.id = 2;

我有一个结果

THX。

1 个答案:

答案 0 :(得分:1)

在以下查询中

select count(*) into nbEquipement from flux_isu_equ_aff_tab fieat, flux_isu_equ fie where fieat.EQU_ID = fie.id AND fie.id = equ_id;

equ_id指的是表格的字段。由于FLUX_ISU_EQU_AFF_TAB具有列equ_id。因此,你有一个看起来像这样的联接。 fieat.EQU_ID = fie.id

你应该做的很简单。只需将变量重命名为IN_EQU_ID或PARAM_EQU_ID orso即可。您的查询应如下所示:

select count(*) into nbEquipement from flux_isu_equ_aff_tab fieat, flux_isu_equ fie where fieat.EQU_ID = fie.id AND fie.id = in_equ_id;

存储过程应如下所示:

create or replace
PROCEDURE DONNEES_IS_PRESENT(in_equ_id IN NUMBER, isCheckDonnees IN OUT BOOLEAN) AS
nbEquipement NUMBER;
BEGIN
nbEquipement := 0;
select count(*) into nbEquipement from flux_isu_equ_aff_tab fieat, flux_isu_equ fie where fieat.EQU_ID = fie.id AND fie.id = in_equ_id;
  IF nbEquipement = 0 THEN
    isCheckDonnees := false;
    --Pk_Compas_Util.LOG_ERROR('Pk_Compas_Flux_Isu.IMPORT_EQUIPEMENT_EAI', 'IMPORT_EQUIPEMENT_EAI', equ_id, NULL, NULL, 'Acune correspondance pour l''id '''||equ_id||''' dans la table FLUX_ISU_EQU_AFF_TAB', NULL);
  END IF;
END;

我认为最好是你的所有参数都以IN_为前缀或类似的东西 因此,您的参数名称与字段名称

不同