Хранимая процедура, которая принимает запрос в качестве параметра

Я просто испытал эту проблему. Кажется, что это работает, просто изменив конструкцию сканера. Замените это:

File file1 = new File("file1");
Scanner in= new Scanner(file1);

с помощью этого:

FileReader file1 = new FileReader("file1");
Scanner in= new Scanner(file1);

Возможно, проблема возникает, когда вы создаете сканер из файла без системы, зная, что это текстовый файл.

1
задан dashmug 17 January 2019 в 04:01
поделиться

1 ответ

Вы можете сделать это в хранимой процедуре с помощью PREPARE и EXECUTE , но это считается уязвимостью безопасности для запуска произвольного SQL таким способом. Вы сказали, что процедура будет использоваться только специальным аккаунтом, но просто позволить существовать процедуре - это риск. Что, если привилегии изменены и позволят кому-либо запускать процедуру?

Также будет довольно медленно выполнять этот запрос во многих схемах, потому что MySQL выполняет только один поток на запрос. Он должен будет выполнять запросы последовательно, собирая результат во временную таблицу.

Также у вас есть ограничение на длину любого отдельного SQL-запроса, которое составляет max_allowed_packet. Это должно быть довольно большим, но вы все равно можете превысить длину, если у вас достаточно терминов UNION.

Я работал над сайтом, подобным описанному вами, где было много схем, по одной на клиента, с одинаковыми таблицами. Когда мы хотели выполнить запрос по всем схемам, я запускал простой запрос (нет UNION) во многих параллельных потоках и собирал результаты в коде приложения.


См. https://thedailywtf.com/articles/For-the-Ease-of-Maintenance для интересного рассказа о хранимых процедурах, которые позволяют вводить произвольный SQL.

0
ответ дан Bill Karwin 17 January 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: