OK, you will have some work to do. You can't pass 10,20,30 to a stored proc and use it in an 'IN' statement. It gets translated to 'IN ('10,20,30') which is not what you want.
For something like that, and I don't know the Oracle syntax, you would want something like CHARINDEX('10,20,30', CONVERT(VARCHAR, fieldName)) > 0
though, to get rid of false positives, you would want to surround all with commas an make sure that there are no spaces, then you can use syntax like CHARINDEX(',10,20,30,', ',' + CONVERT(VARCHAR, fieldName) + ',') > 0
Crystal is probably doing the same thing. The way I got around this for my stored procs is to use a function that parses the string 10,20,30 into a table that has the values for the rows.
with all of this in mind, select * from emp where depcode in {?Etype} shouldn't work. Try:
select * from emp where charindex({?Etype}, depcode) > 0
since there could be some false positives, I would follow up with code in the Report/Selection Formulas/Records since you can manipulate the values of {?Etype} or split it into an array and check it that way...