Quando uma classe Java cl
com um método mth
reside em um pacote pck
, o que devo colocar na EXTERNAL NAME
cláusula de CREATE PROCEDURE
?
eu tentei
CREATE PROCEDURE mth (arg1 INTEGER) LANGUAGE JAVA EXTERNAL NAME 'myjar:pck/cl.mth'
CREATE PROCEDURE mth (arg1 INTEGER) LANGUAGE JAVA EXTERNAL NAME 'myjar:pck.cl.mth'
CREATE PROCEDURE mth (arg1 INTEGER) LANGUAGE JAVA EXTERNAL NAME 'myjar:cl.mth'
mas de qualquer forma, eu receboThe user defined function or procedure "mth" was unable to map to a single Java method.. SQLCODE=-20204, SQLSTATE=46008, DRIVER=3.68.61
No lado Java, o método é declarado da seguinte forma:
public void send_mail( // with or w/o static, with or w/o synchronized
final String P_TO,
final String P_CC,
final String P_BCC,
final String P_FROM,
final String P_SUBJECT,
final String P_TEXT_MSG,
final String P_HTML_MSG,
final String P_ATTACH_NAME,
final String P_ATTACH_MIME,
final byte[] P_ATTACH_BLOB,
final String P_SMTP_HOST,
final int P_SMTP_PORT,
final String P_USER_NAME,
final String P_PASSWORD
No lado do DB2, o procedimento está sendo tentado para criar da seguinte forma:
CREATE PROCEDURE send_mail(
IN P_TO VARCHAR(4096),
IN P_CC VARCHAR(4096) DEFAULT NULL,
IN P_BCC VARCHAR(4096) DEFAULT NULL,
IN P_FROM VARCHAR(4096),
IN P_SUBJECT VARCHAR(32672),
IN P_TEXT_MSG VARCHAR(32672) DEFAULT NULL,
IN P_HTML_MSG VARCHAR(32672) DEFAULT NULL,
IN P_ATTACH_NAME VARCHAR(255) DEFAULT NULL,
IN P_ATTACH_MIME VARCHAR(100) DEFAULT NULL,
IN P_ATTACH_BLOB BLOB DEFAULT NULL,
IN P_SMTP_HOST VARCHAR(255),
IN P_SMTP_PORT INTEGER DEFAULT 25,
IN P_USER_NAME VARCHAR(255) DEFAULT NULL,
IN P_PASSWORD VARCHAR(32672) DEFAULT NULL
)
LANGUAGE java
PARAMETER STYLE java
FENCED THREADSAFE
EXTERNAL NAME 'javadb2:db2.smtp.send_mail' -- with or w/o db2
Verifiquei e verifiquei novamente que toda vez sqlj.db2_install_jar
que aparece na function\username
pasta na hierarquia de pastas do DB2.
O formato correto é
<JAR name>:<class name>.<method name>
,<class name>
é totalmente qualificado, ou seja, inclui o nome do pacote. Como você ainda está recebendo esse erro, é provável que a assinatura do seu método não esteja em conformidade com a convenção que você usa. Você não especifica aPARAMETER STYLE
opção, o significadoDB2GENERAL
é usado por padrão, o que não é recomendado. UsePARAMETER STYLE JAVA
e verifique se a assinatura do método está correta (public static void mth(int arg1)
no seu exemplo inventado).Observe também que