Я нашел верный способ для этого, суммируя все вышеперечисленные советы.Мой производственный запрос (я разместил здесь гораздо более простую версию) использует IN <>, где ни коды, ни их количество неизвестны.Это может быть один код (например, FIN
) или серия из них (FITLC FITLD FITLU FITSC FITSD FITSU MDYLC MDYLD MDYLU
).Некоторая функция возвращает это в виде списка.
Код, который делает это:
@codes = get_muni_evcode( $category );
my $in = join( ', ', ('?') x @codes );
print "\n\nProcessing Category: $category --> Codes: @codes .. in: $in\n";
my $sql = "select distinct cusip9
from material_event
where event_date between (trunc(sysdate) - 1) + 2/3 and trunc(sysdate) + 2/3
and event_code in ($in)";
my $sth2 = $dbh->prepare($sql);
$sth2->execute( @codes );
while (my $s2 = $sth2->fetchrow_hashref('NAME_lc'))
{
my $cusip9 = $s2->{cusip9};
print "$cusip9\t";
.................. further processing ..............
}
Пример результата:
Processing Category: RatingChange --> Codes: FITLC FITLD FITLU FITSC FITSD FITSU MDYLC MDYLD MDYLU MDYSC MDYSD MDYSU SPLD SPLPR SPLU SPSD SPSPR SPSU .. in: ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?
359496HQ2 359496GB6 359496GH3 359496GL4 359496HU3 359496HS8 359496HA7 359496HF6 359496GM2 359496HM1 359496HR0 359496HT6 359496GY6 359496GJ9 359496HL3 359496GU4 359496HK5 359496HN9 359496HP4 359496GW0 359496GZ3 359496HC3 359496GC4 359496GK6 359496GP5 359496GV2 359496GX8 359496GN0
IЯ чрезвычайно благодарен всем, кто разместил здесь свои идеи, которые, наконец, заставили меня найти правильный способ сделать это.Я думаю, это довольно распространенная проблема.