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 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190
|
FUNCTION SUM_VOL(PC_ch_nom VARCHAR2, -- à cause de 'Tous'
PC_ch_mill VARCHAR2, -- à cause de 'Tous'
PC_oc_tranche VARCHAR2, -- à cause de 'Tous'
PC_cc_nom PR2000.CC_NOM%TYPE DEFAULT NULL,
PC_ag_nom PR2000.AG_NOM%TYPE DEFAULT NULL,
PC_exist_repart_offre VARCHAR2 DEFAULT NULL,
PC_oc_ol_seq PR1000.OC_SEQ%TYPE DEFAULT NULL)
RETURN NUMBER IS
LC_sql_stmt VARCHAR2(500);
LC_table VARCHAR2(25);
LN_qte VARCHAR2(25);
LN_qte1 VARCHAR2(25);
LN_somme1 VARCHAR2(255) := 0;
LN_somme2 VARCHAR2(255) := 0;
BEGIN
IF PC_cc_nom = 'O'
AND PC_ag_nom = 'O' THEN
LC_table := 'PR1000';
LN_qte := 'OC_QTEINI';
LN_qte1 := 'OC_QTEOK';
ELSE
LC_table := 'PR2000';
LN_qte := 'OL_QTEINI';
LN_qte1 := 'OL_QTEOK';
END IF;
IF LC_table = 'PR1000' THEN
LC_sql_stmt := ' SELECT NVL( SUM(' || LC_table || '.' || LN_qte || ' * PR0050.CD_NBBT * PR0050.CD_VOLBT) , 0 ) ' ||
' FROM ' || LC_table || ', PR0050' ||
' WHERE ' || LC_table || '.CD_NOM = PR0050.CD_NOM' ||
' AND ' || LC_table || '.CH_NOM LIKE ' || ADD_QUOTE_STRING(PC_ch_nom) ||
' AND ' || LC_table || '.CH_MILL LIKE DECODE( UPPER(' || ADD_QUOTE_STRING(PC_ch_mill) || '), ''TOUS'', ''%'', ' ||
ADD_QUOTE_STRING(PC_ch_mill) || ')' ||
' AND ' || LC_table || '.OC_TRANCHE LIKE ' || ADD_QUOTE_STRING(PC_oc_tranche) ||
' AND ' || LC_table || '.OC_TOPOK <> ''O''';
IF PC_oc_ol_seq IS NOT NULL THEN
LC_sql_stmt := LC_sql_stmt ||
' AND ' || LC_table || '.OC_SEQ <> ' || ADD_QUOTE_STRING(PC_oc_ol_seq);
END IF;
LN_somme1 := L_EXECUTE_DYNAMIC(LC_sql_stmt);
LC_sql_stmt := ' SELECT NVL( SUM(' || LC_table || '.' || LN_qte1 || ' * PR0050.CD_NBBT * PR0050.CD_VOLBT) , 0 ) ' ||
' FROM ' || LC_table || ', PR0050' ||
' WHERE ' || LC_table || '.CD_NOM = PR0050.CD_NOM' ||
' AND ' || LC_table || '.CH_NOM LIKE ' || ADD_QUOTE_STRING(PC_ch_nom) ||
' AND ' || LC_table || '.CH_MILL LIKE DECODE( UPPER(' || ADD_QUOTE_STRING(PC_ch_mill) || '), ''TOUS'', ''%'', ' ||
ADD_QUOTE_STRING(PC_ch_mill) || ')' ||
' AND ' || LC_table || '.OC_TRANCHE LIKE ' || ADD_QUOTE_STRING(PC_oc_tranche) ||
' AND ' || LC_table || '.OC_TOPOK = ''O''';
IF PC_oc_ol_seq IS NOT NULL THEN
LC_sql_stmt := LC_sql_stmt ||
' AND ' || LC_table || '.OC_SEQ <> ' || ADD_QUOTE_STRING(PC_oc_ol_seq);
END IF;
LN_somme2 := L_EXECUTE_DYNAMIC(LC_sql_stmt);
ELSE -- PR2000
-- somme1
LC_sql_stmt := ' SELECT NVL( SUM(' || LC_table || '.' || LN_qte || ' * PR0050.CD_NBBT * PR0050.CD_VOLBT) , 0 ) ' ||
' FROM ' || LC_table || ', PR0050' ||
' WHERE ' || LC_table || '.CD_NOM = PR0050.CD_NOM ' ||
' AND ' || LC_table || '.CH_NOM LIKE ' || ADD_QUOTE_STRING(PC_ch_nom) ||
' AND ' || LC_table || '.CH_MILL LIKE DECODE( UPPER(' || ADD_QUOTE_STRING(PC_ch_mill) || '), ''TOUS'', ''%'', ' ||
ADD_QUOTE_STRING(PC_ch_mill) || ')' ||
' AND ' || LC_table || '.OL_TRANCHE LIKE ' || ADD_QUOTE_STRING(PC_oc_tranche) ||
' AND ' || LC_table || '.OL_ETAT = ''N''';
IF NVL(PC_cc_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.CC_NOM LIKE ' || ADD_QUOTE_STRING(PC_cc_nom);
IF NVL(PC_ag_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.AG_NOM IS NULL';
END IF;
END IF;
IF NVL(PC_ag_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.AG_NOM LIKE ' || ADD_QUOTE_STRING(PC_ag_nom);
IF NVL(PC_cc_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.CC_NOM IS NULL';
END IF;
END IF;
IF PC_oc_ol_seq IS NOT NULL THEN
LC_sql_stmt := LC_sql_stmt ||
' AND ' || LC_table || '.OL_SEQ <> ' || ADD_QUOTE_STRING(PC_oc_ol_seq);
END IF;
IF PC_exist_repart_offre <> 'N' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND NOT EXISTS ( SELECT * ' ||
' FROM PR1010' ||
' WHERE PR1010.CH_NOM LIKE ' || ADD_QUOTE_STRING(PC_ch_nom) ||
' AND PR1010.CH_MILL LIKE DECODE( UPPER(' || ADD_QUOTE_STRING(PC_ch_mill) || '), ''TOUS'', ''%'', ' ||
ADD_QUOTE_STRING(PC_ch_mill) || ')';
IF NVL(PC_cc_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.CC_NOM LIKE ' || ADD_QUOTE_STRING(PC_cc_nom);
IF NVL(PC_ag_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.AG_NOM IS NULL';
END IF;
ELSE
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.CC_NOM = PR2000.CC_NOM';
END IF;
IF NVL(PC_ag_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.AG_NOM LIKE ' || ADD_QUOTE_STRING(PC_ag_nom);
IF NVL(PC_cc_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.CC_NOM IS NULL';
END IF;
ELSE
LC_sql_stmt := LC_sql_stmt ||
'AND PR1010.AG_NOM = PR2000.AG_NOM';
END IF;
LC_sql_stmt := LC_sql_stmt ||
'AND PR1010.OC_TRANCHE LIKE ' || ADD_QUOTE_STRING(PC_oc_tranche) || ')';
END IF;
LN_somme1 := L_EXECUTE_DYNAMIC(LC_sql_stmt);
-- somme2
LC_sql_stmt := ' SELECT NVL( SUM(' || LC_table || '.' || LN_qte1 || ' * PR0050.CD_NBBT * PR0050.CD_VOLBT) , 0 ) ' ||
' FROM ' || LC_table || ', PR0050' ||
' WHERE ' || LC_table || '.CD_NOM = PR0050.CD_NOM ' ||
' AND ' || LC_table || '.CH_NOM LIKE ' || ADD_QUOTE_STRING(PC_ch_nom) ||
' AND ' || LC_table || '.CH_MILL LIKE DECODE( UPPER(' || ADD_QUOTE_STRING(PC_ch_mill) || '), ''TOUS'', ''%'', ' ||
ADD_QUOTE_STRING(PC_ch_mill) || ')' ||
' AND ' || LC_table || '.OL_TRANCHE LIKE ' || ADD_QUOTE_STRING(PC_oc_tranche) ||
' AND ' || LC_table || '.OL_ETAT = ''A''';
IF NVL(PC_cc_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.CC_NOM LIKE ' || ADD_QUOTE_STRING(PC_cc_nom);
IF NVL(PC_ag_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.AG_NOM IS NULL';
END IF;
END IF;
IF NVL(PC_ag_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.AG_NOM LIKE ' || ADD_QUOTE_STRING(PC_ag_nom);
IF NVL(PC_cc_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR2000.CC_NOM IS NULL';
END IF;
END IF;
IF PC_oc_ol_seq IS NOT NULL THEN
LC_sql_stmt := LC_sql_stmt ||
' AND ' || LC_table || '.OL_SEQ <> ' || ADD_QUOTE_STRING(PC_oc_ol_seq);
END IF;
IF PC_exist_repart_offre <> 'N' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND NOT EXISTS ( SELECT * ' ||
' FROM PR1010' ||
' WHERE PR1010.CH_NOM LIKE ' || ADD_QUOTE_STRING(PC_ch_nom) ||
' AND PR1010.CH_MILL LIKE DECODE( UPPER(' || ADD_QUOTE_STRING(PC_ch_mill) || '), ''TOUS'', ''%'', ' ||
ADD_QUOTE_STRING(PC_ch_mill) || ')';
IF NVL(PC_cc_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.CC_NOM LIKE ' || ADD_QUOTE_STRING(PC_cc_nom);
IF NVL(PC_ag_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.AG_NOM IS NULL';
END IF;
ELSE
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.CC_NOM = PR2000.CC_NOM';
END IF;
IF NVL(PC_ag_nom, 'O') <> 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.AG_NOM LIKE ' || ADD_QUOTE_STRING(PC_ag_nom);
IF NVL(PC_cc_nom, 'O') = 'O' THEN
LC_sql_stmt := LC_sql_stmt ||
' AND PR1010.CC_NOM IS NULL';
END IF;
ELSE
LC_sql_stmt := LC_sql_stmt ||
'AND PR1010.AG_NOM = PR2000.AG_NOM';
END IF;
LC_sql_stmt := LC_sql_stmt ||
'AND PR1010.OC_TRANCHE LIKE ' || ADD_QUOTE_STRING(PC_oc_tranche) || ')';
END IF;
LN_somme2 := L_EXECUTE_DYNAMIC(LC_sql_stmt);
END IF;
RETURN (LN_somme1 + LN_somme2);
END; |
Partager