我在 Navicat 中執行以下代碼:
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "util"
AS
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static String exec(String cmd)
{
Runtime.getRuntime().exec(cmd);
return "";
}
}
它失敗了:
ORA-29536: badly formed source: Encountered "<EOF>" at line 1, column 16.
Was expecting:
";" ...
, Time: 0.059000s
源代碼用javac編譯正確,為什么在Oracle19下不行?
uj5u.com熱心網友回復:
如果你編譯它,你會得到例外:
ORA-29535: source requires recompilation
util:7: error: unreported exception IOException; must be caught or declared to be thrown
Runtime.getRuntime().exec(cmd);
^
1 error
您可以解決這個問題(以及其他一些不影響編譯但不需要包含的小事情,并且您可能不想使用帶引號的識別符號):
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 "";
}
}
然后它編譯Oracle 18 db<>fiddle。
注意:此函式對您的資料庫來說是一個巨大的安全問題,您可能應該找到替代解決方案,而不是允許任意代碼執行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/367859.html
上一篇:PL/SQL:我在用另一個表中的資料更新表時遇到問題
下一篇:Oracle自聯接
