1

我有两张这样的桌子

通量_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)

我的表中有这样的数据:

通量_ISU_EQU

在此处输入图像描述

FLUX_ISU_EQU_AFF_TAB

在此处输入图像描述

我有这样的程序:

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;

我有一个结果

谢谢。

4

1 回答 1

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 即可。您的查询应如下所示:

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_ 或类似名称为前缀,这样您的参数名称就不会与字段名称相同

于 2012-07-12T10:22:03.650 回答