Search Posts

DB2 UDF

CLASSPATH=/opt/ibm/db2/V11.1/java/db2java.zip:/opt/ibm/db2/V11.1/java/sqlj.zip:/opt/ibm/db2/V11.1/java/db2jcc.jar:/opt/ibm/db2/V11.1/java/db2jcc_license_cu.jar

/opt/ibm/db2/V11.1/samples/java/sqlj

File UDFJsrv.java

import java.lang.; // for String class import java.io.; // for …Stream classes

public class UDFjsrv
{
// scalar UDF
public static double scalarUDF(String inJob, double inSalary)
throws Exception
{
double outNewSalary = 0.00;

if (inJob.equals("Mgr  "))
{
  outNewSalary = inSalary * 1.20;
}
else if (inJob.equals("Sales"))
{
  outNewSalary = inSalary * 1.10;
}
else
{
  // Job is clerk
  outNewSalary = inSalary * 1.05;
}
// set the output value
return outNewSalary;

}

}

compila con javac UDFjsrv.java

copia .class in /home/db2inst1/sqllib/function/

esegui lo script per creare la UDF “db2 -td@ -vf <script name>”

connect to TESTDB@

CREATE FUNCTION scalarUDF(CHAR(5), DOUBLE)
RETURNS DOUBLE
EXTERNAL NAME 'UDFjsrv!scalarUDF'
LANGUAGE JAVA
PARAMETER STYLE JAVA
NOT VARIANT
FENCED
CALLED ON NULL INPUT
NO SQL
NO EXTERNAL ACTION@

connect reset@

Test la UDF da db2 command line:

db2 => connect to TESTDB

   Database Connection Information

 Database server        = DB2/LINUXPPC64LE 11.1.4.7
 SQL authorization ID   = DB2INST1
 Local database alias   = TESTDB

db2 => SELECT scalarUDF('Sales',1) FROM SYSIBM.SYSDUMMY1

1
------------------------
  +1.10000000000000E+000

  1 record(s) selected.

db2 =>