Bonjour à tous,

J'ai créé la procédure ci-dessous qui doit me remonter des informations "Contact". En input de cette procédure j'ai n variables non obligatoire en possible critère de recherche. J'ai 2 critères de recherches obligatoires mais peu importe lesquels. Aussi, je ne sais jamais quel est le 1er critère que je vais utiliser ni le dernier.
Du coup, je ne parviens pas à positionner mon 1er "AND".
Dans mon exemple, je me retrouve avec 2 "AND" : "AND AND ...."

Auriez-vous une methode à me proposer ?

Merci,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
 
CREATE OR REPLACE PROCEDURE Proxi_Scan_Req_Lieu_Occ (LIEU_ADDR IN VARCHAR2,LIEU_ZIPCODE IN VARCHAR2,LIEU_CITY IN VARCHAR2,BAT_NAME IN VARCHAR2,BAT_ENTRY IN VARCHAR2,LIEU_ETAGE IN VARCHAR2,LIEU_NUM IN VARCHAR2,OCC_CELL_PH IN VARCHAR2,OCC_WORK_PH IN VARCHAR2,OCC_HOME_PH IN VARCHAR2,CLT_NAME IN VARCHAR2,OCC_LST_NAME IN VARCHAR2,OCC_FST_NAME IN VARCHAR2,GRP_NAME IN VARCHAR2, CR_LIEU_OCC OUT SYS_REFCURSOR) AS
 
 
	--sSearchSpec VARCHAR2(10000);
	sqlstring VARCHAR2(30000);
	sqlstring2 VARCHAR2(30000);
 
BEGIN
 
IF (LIEU_ADDR IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Lieu.ADDR = ' || '''' || LIEU_ADDR || ''' ';
END IF;
 
IF (LIEU_ZIPCODE IS NOT NULL) THEN 
sqlstring := sqlstring || ' AND Lieu.ZIPCODE = ' || '''' || LIEU_ZIPCODE || ''' ';
END IF;
 
IF (LIEU_CITY IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Lieu.CITY = ' || '''' || LIEU_CITY || ''' ';
END IF;
 
IF (OCC_LST_NAME IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Occupant.LAST_NAME = ' || '''' || OCC_LST_NAME || ''' ';
END IF;
 
IF (OCC_FST_NAME IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Occupant.FST_NAME = ' || '''' || OCC_FST_NAME || ''' ';
END IF;
 
IF (BAT_NAME IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Batiment.NAME = ' || '''' || BAT_NAME || ''' ';
END IF;
 
IF (BAT_ENTRY IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Entree.DESCRIPTOR = ' || '''' || BAT_ENTRY || ''' ';
END IF; 
 
IF (LIEU_ETAGE IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Lieu_Ext.X_ETAGE = ' || '''' || LIEU_ETAGE || ''' ';
END IF;
 
IF (LIEU_NUM IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Lieu_Ext.X_NUM = ' || '''' || LIEU_NUM || ''' ';
END IF;
 
IF (OCC_CELL_PH IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Occupant.CELL_PH_NUM = ' || '''' || OCC_CELL_PH || ''' ';
END IF;
 
IF (OCC_WORK_PH IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Occupant.WORK_PH_NUM = ' || '''' || OCC_WORK_PH || ''' ';
END IF;
 
IF (OCC_HOME_PH IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Occupant.HOME_PH_NUM = ' || '''' || OCC_HOME_PH || ''' ';
END IF;
 
IF (CLT_NAME IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Client.NAME = ' || '''' || CLT_NAME || ''' ';
END IF;
 
IF (GRP_NAME IS NOT NULL) THEN
sqlstring := sqlstring || 'AND Groupe.NAME = ' || '''' || GRP_NAME || ''' ';
END IF;  
 
    OPEN CR_LIEU_OCC FOR
 
/* ********************  RECHERCHE DU LIEU/CONTACT ********************* */
SELECT  
  Lieu.ROW_ID "Lieu : Id", 
FROM 
  S_ORG_EXT Groupe,
  S_ADDR_PER Lieu,
  S_ADDR_PER_CUTX Lieu_Ext,
  S_CONTACT Occupant,
  S_LST_OF_VAL Lov_Groupe,
  ...
  S_DOC_AGREE Contrat,
  S_ORG_EXT CLIENT
WHERE Lov_Groupe.TYPE = 'PROXI_CATEGORIE_GROUPE'   			-- LOV TYPE
  ...
  AND Contrat.TARGET_OU_ID = CLIENT.ROW_ID				-- Lien Contrat / Client
  AND sqlstring2 = '''' || sqlstring || ''' ';
 
 
END Proxi_Scan_Req_Lieu_Occ;
/