Попробуйте это:
EXEC sp_executesql @sql, N'@id int', @id
Больше информации в этой замечательной статье: http://www.sommarskog.se/dynamic_sql.html
Что касается вывода, ваш SELECT должен выглядеть примерно так:
SELECT @countVal = COUNT(id) FROM owner.myTable WHERE id = @id
Я выбираю 'id' вместо '*', чтобы избежать извлечения ненужных данных ...
Тогда ваш динамический sql должен выглядеть примерно так:
EXEC sp_executesql @sql,
N'@id int, @countVal int OUTPUT',
@id,
@countVal OUTPUT
Этот пример взят из той же статьи, на которую есть ссылки в разделе sp_executesql .
Что касается вашей ошибки Oracle, вам необходимо выяснить точный SQL, который sp_executesql отправляет в Oracle. Если в Oracle есть профилировщик или журнал запросов, это может помочь. У меня ограниченный опыт работы с Oracle, но это будет следующим логическим шагом для устранения проблемы.