Если вам нужна эта процедура, то я предполагаю, что у вас есть несколько таблиц со столбцами bankcode
, bankname
и dist_code
. Если это так, попробуйте нормализовать вашу модель, если это возможно.
Термин USING
является правильным подходом, но вы должны использовать параметр в своем запросе.
Чтобы избежать внедрения SQL, вы можете использовать dbms_assert.sql_object_name
.
Это должно работать для вас:
v_tem := 'SELECT bankcode, bankname, dist_code FROM '
|| dbms_assert.sql_object_name(p_tablename)
|| ' WHERE bankname LIKE :1';
Ваш EXECUTE IMMEDIATE
сгенерирует исключение, если не найдет ни одной строки или более одной строки, поэтому использование LIKE
может быть не очень хорошей идеей.
Вопросы, которые вы должны задать себе:
- Правильно ли нормализована модель?
- Вам действительно нужно использовать
LIKE
, или =
, что вы хотите?
- Если вы хотите использовать
LIKE
, как программа должна обращаться с NO_DATA_FOUND
/ TOO_MANY_ROWS
исключениями?