1

私はこのような2つのテーブルを持っています

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

ここに画像の説明を入力してください

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=1ではなくnbEquipement=3になるのはなぜですか。

なぜ..?

PS:私がするとき

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

結果が1つあります

どうも。

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 に答える