copyFile(String, String)
メソッドを定義する Java クラスがあるとします。
public class FileSystem {
public static void copyFile(String sourcePath, String destinationPath)
throws IOException
{
// ignore the fact that I'm not properly managing resources...
FileInputStream source = new FileInputStream(sourcePath);
FileOutputStream destination = new FileOutputStream(destinationPath);
copyStream(source, destination);
source.close();
destination.close();
}
private static void copyStream(InputStream source, OutputStream destination)
throws IOException
{
byte[] buffer = new byte[1024];
int length;
while ( (length = source.read(buffer)) != -1 ) {
destination.write(buffer, 0, length);
}
}
}
そして、これを Java ストアド プロシージャでラップするとします。
CREATE PROCEDURE copy_file (source_path VARCHAR2, destination_path VARCHAR2)
AS LANGUAGE JAVA
NAME 'FileSystem.copyFile(String, String)';
copy_file
ここで、ストアド プロシージャを呼び出すと、JavaIOException
がスローされます。
BEGIN
copy_file( '/some/file/that/does/not/exist.txt', '/path/to/destination.txt' );
END;
PL/SQL ブロックで発生したエラーは次のとおりです。
ORA-29532: キャッチされていないJava例外によりJavaコールが終了しました
エラー メッセージには、キャッチされなかった の説明も含まれていますが、Exception
まだORA-29532
. Exception
PL/SQLで発生したエラー・コードとエラー・メッセージの両方を指定するfrom Javaをスローする方法はありますか?