Моя ситуация такова, что мне нужно создавать разделы БД на лету в определенное время. Я использую Statement
, как показано ниже:
alter table table_name split partition default_partition values (' +
id + ') into ( partition " + partitionName + ", partition
default_partition) update indexes
Это прекрасно работает и делает именно то, что я ожидаю. Однако значение id
исходит от ввода, к которому потенциально может получить доступ неавторизованный человек. Таким образом, вышеприведенный оператор уязвим для атаки SQL-инъекцией . Я хотел бы использовать PreparedStatement
, но не могу понять, как.
Проблема в том, что таблица разделов в oracle помещает значение "id
" в столбец HIGH_VALUE, который является LONG. Я не вижу подходящего сеттера для этого (поскольку String не может работать). Я попытался использовать различные потоковые сообщения с StringReader
и ByteArrayInputStream
в качестве значения, но безрезультатно. Я знаю, что LONG больше не должны использоваться, но у Oracle это так, поэтому я не могу обойти это.
Когда я пытаюсь любым из этих способов, вот что я получаю:
ORA-14308: partition bound element must be one of: string, datetime or interval literal, number, or NULL
В документации Oracle есть хорошая информация о том, как получить LONG (тип данных оракула, который похож на LOB), но не о том, как его установить. Может ли кто-нибудь помочь мне с этим? Я также изучил реализацию Oracle драйвера JDBC, но, похоже, у него тоже нет метода типа setLONG. Есть ли способ, которым я могу это сделать?