Я пытаюсь выполнить следующий оператор в Navicat,

CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED util
AS
import java.io.IOException;

public class Util
{
    public static String exec(String cmd) throws IOException
    {
        Runtime.getRuntime().exec(cmd);
        return "";
    }
}

Но поскольку ; рассматривается как разделитель в SQL-запросе, запрос стал "неполным" и приводит к ошибке:

enter image description here

Итак, как я могу выполнить этот оператор в Navicat?

0
daisy 27 Ноя 2021 в 07:26

1 ответ

Лучший ответ

Сохраните команду в виде строки и динамически выполните ее с анонимным блоком PL / SQL:

begin
    execute immediate
    '
        CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED util
        AS
        import java.io.IOException;

        public class Util
        {
            public static String exec(String cmd) throws IOException
            {
                Runtime.getRuntime().exec(cmd);
                return "";
            }
        }
    ';
end;
/

Не многие IDE Oracle понимают синтаксис Java, но я предполагаю, что почти все они могут работать с блоками PL / SQL.

1
Jon Heller 27 Ноя 2021 в 08:39