Estoy intentando ejecutar la siguiente declaración en 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 "";
    }
}

Pero dado que ; se trata como un delimitador en la consulta SQL, la consulta se volvió "incompleta" y da como resultado un error:

enter image description here

Entonces, ¿cómo puedo ejecutar esta declaración en Navicat?

0
daisy 27 nov. 2021 a las 07:26

1 respuesta

La mejor respuesta

Almacene el comando como una cadena y ejecútelo dinámicamente con un bloque PL / SQL anónimo:

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;
/

No muchos IDE de Oracle entienden la sintaxis de Java, pero supongo que casi todos pueden funcionar con bloques PL / SQL.

1
Jon Heller 27 nov. 2021 a las 08:39