Just as stored procedures may be written in PL/SQL (Oracle's native language) and then called from PL/SQL, directly, or from Java using JDBC, so too stored procedures may be written in Java and called from PL/SQL or Java.
Before Oracle 10g, calling stored procedures from Java was
Code Block |
---|
package org.glast.pipeline.server.sql.sp; public class SPStream { // Package-specific Exception types: PROCEDURE SetProcessInstanceStatus(ProcessInstance_in IN int, ProcessingStatus_in IN VARCHAR2, transitionTime_in IN TimeStamp) IS public static final int invalid_stream_ex ProcessInstanceRow_out ProcessInstance%ROWTYPE; ProcessType_out ProcessType.ProcessType%TYPE; = -20026; StreamStatus_out StreamStatus.StreamStatus%TYPE; // ProcessingStatusBEGIN Enumeration Constants: public static finalselect String* ps_waiting = "WAITING";into ProcessInstanceRow_out public static final String ps_ready from ProcessInstance = "READY"; public staticwhere finalProcessInstance String = ProcessInstance_in; ps_queued =select ProcessType "QUEUED"; public static final String into psProcessType_submittedout = "SUBMITTED"; public staticfrom finalProcess String ps_running = where Process "RUNNING"= ProcessInstanceRow_out.Process; public static final String IF 0 = ps_success = "SUCCESS"; public static final String ps_failed = "FAILED"; public static final String ps_terminated = "TERMINATED"; public static final String ps_canceled = "CANCELED"; public static final String ps_skipped GetStateTransitionValid(ProcessInstanceRow_out.ProcessingStatus, ProcessingStatus_in, ProcessType_out) THEN RAISE_APPLICATION_ERROR(invalid_status_transition_ex, 'Not a valid state transition from ' || ProcessInstanceRow_out.ProcessingStatus || ' to ' || = "SKIPPED"; // StreamStatus Enumeration Constants: ProcessingStatus_in || public static final String ss_waiting = ' for a "WAITING"; process of type public' static|| final String ss_queued = "QUEUED"; public static final StringProcessType_out || ss_running = "RUNNING"'.'); public static final String RETURN; ss_success = END "SUCCESS"IF; public static final String update ProcessInstance ss_failed = "FAILED"; set ProcessingStatus = publicProcessingStatus_in static final String ss_terminated = where ProcessInstance "TERMINATED"= ProcessInstance_in; public static final String IF ps_submitted = ssProcessingStatus_canceledin THEN = "CANCELED"; public static finalupdate StringProcessInstance ss_terminating = "TERMINATING"; public staticset finalSubmitDate String= transitionTime_in ss_canceling = "CANCELING"; private static HashSetwhere processingStatesProcessInstance = new HashSet()ProcessInstance_in; static { ELSIF processingStates.add(ps_waiting); ps_running = ProcessingStatus_in THEN processingStates.add(ps_ready); processingStates.add(ps_queued);update ProcessInstance processingStates.add(ps_submitted); processingStates.add(ps_running); set StartDate processingStates.add(ps_success);= transitionTime_in processingStates.add(ps_failed); processingStates.add(ps_terminated); where ProcessInstance = processingStates.add(ps_canceled)ProcessInstance_in; processingStates.add(ps_terminated); ELSIF ps_success = processingStates.add(ps_skipped); } ProcessingStatus_in OR ps_failed = ProcessingStatus_in THEN private static HashSet finalProcessingStates = new HashSet(); staticupdate {ProcessInstance finalProcessingStates.add(ps_terminated); finalProcessingStates.add(ps_canceled); set EndDate = finalProcessingStates.add(ps_success);transitionTime_in finalProcessingStates.add(ps_failed); finalProcessingStates.add(ps_skipped); } where ProcessInstance = ProcessInstance_in; private static HashSet streamStates = newEND HashSet()IF; static { CheckProcessDependents(ProcessInstanceRow_out.Process, streamStates.add(ss_waitingProcessInstanceRow_out.Stream, ProcessingStatus_in); StreamStatus_out := streamStatesSP_STREAM.addcalculateStreamStatus(ssProcessInstanceRow_queuedout.Stream); END; |
Code Block |
---|
public void streamStates.add(ss_running);setProcessInstanceStatus(int processInstance, ProcessingStatus newProcessingStatus, Timestamp transitionTime) throws InvalidStatusTransitionException, SQLException { streamStates.add(ss_success); CallableStatement stmt = streamStatesconnection.add(ss_failedprepareCall("{call DATA_ACCESS.SetProcessInstanceStatus(?,?,?)}"); streamStates.add(ss_terminating); try streamStates.add(ss_terminated);{ streamStates.add(ss_canceling); streamStates.add(ss_canceledstmt.setInt(1, processInstance); } private static HashSet finalStreamStates = new HashSet(); static { stmt.setString(2, newProcessingStatus.toString()); finalStreamStatesstmt.add(ss_terminatedsetTimestamp(3, transitionTime); finalStreamStates.add(ss_canceled stmt.execute(); finalStreamStates.add(ss_success);} finalStreamStates.add(ss_failed);catch(SQLException x) } private{ static boolean allComplete(Map procStatMap, Map streamStatMap) { for (Iterator i int errorCode = processingStates.iterator(); i.hasNextx.getErrorCode();) { Stringif state(errorCode == (String)i.next();InvalidStatusTransitionException.errorCode) int countthrow =new InvalidStatusTransitionException((Integer)procStatMap.get(state)).intValue()x); if ( !finalProcessingStates.contains(state) && (count != 0) )else returnthrow falsex; } forfinally (Iterator i = streamStates.iterator(); i.hasNext();) { String state = (String)i.nextstmt.close(); } } |
Code Block |
---|
package org.glast.pipeline.server.sql.sp; public class SPStream { // Package-specific Exception types: public static final int invalid_stream_ex int count = ((Integer)streamStatMap.get(state)).intValue(); if ( !finalStreamStates.contains(state) && (count != 0) ) return false; = }-20026; // ProcessingStatus return true; } Enumeration Constants: privatepublic static booleanfinal all(String key, Map map) { ps_waiting = int total = 0"WAITING"; public static final forString (Iterator i = map.values().iterator(); i.hasNext();) { ps_ready = total += ((Integer)i.next()).intValue()"READY"; public static final String } ps_queued return ((Integer)map.get(key)).intValue() == total; } "QUEUED"; privatepublic static booleanfinal any(String key, Map map) { ps_submitted = return ((Integer)map.get(key)).intValue() != 0 "SUBMITTED"; } public static final String calculateStreamStatus(int stream) throws ClassNotFoundExceptionps_running { = String retVal = ss_waiting "RUNNING"; public static final ConnectionString connection = null; // Database connection object ps_success = "SUCCESS"; public static final ResultSetString rset = null; ps_failed = int parentStream = 0; "FAILED"; public static final tryString { ps_terminated = // Get a"TERMINATED"; Default Database Connectionpublic usingstatic Serverfinal SideString JDBC Driver. ps_canceled //= Note : This class will be loaded on the Database Server and hence use a "CANCELED"; public static final String ps_skipped = "SKIPPED"; // StreamStatus Server Side JDBC Driver to get default Connection to Database Enumeration Constants: public static final String ss_waiting = if (System.getProperty("java.vendor").toLowerCase().indexOf("oracle") != -1) { "WAITING"; public static final String ss_queued = // we're running as a stored procedure, connect locally: "QUEUED"; public static final String ss_running = connection = DriverManager.getConnection("jdbc:default:connection")"RUNNING"; public static final String } elsess_success { = "SUCCESS"; // we're running outside the DB, connect via standard oracle jdbc driver:public static final String ss_failed = "FAILED"; public static final String ss_terminated = Class.forName("oracle.jdbc.driver.OracleDriver") "TERMINATED"; public static final String ss_canceled connection = DriverManager.getConnection("jdbc:oracle:thin:@glast-oracle02.slac.stanford.edu:1521:GLASTDEV","GLAST_DP_TEST","BT33%Q9]MU") "CANCELED"; public static final String } ss_terminating = // "TERMINATING"; public static final String ss_canceling // Get= information about current stream"CANCELING"; private static HashSet processingStates = // new HashSet(); static { String currentStatus processingStates.add(ps_waiting); processingStates.add(ps_ready); PreparedStatement stmt = connectionprocessingStates.prepareStatementadd(ps_queued); processingStates.add(ps_submitted); processingStates.add(ps_running); "select * " + processingStates.add(ps_success); processingStates.add(ps_failed); "from Stream " +processingStates.add(ps_terminated); processingStates.add(ps_canceled); processingStates.add(ps_terminated); "where Stream = ? " processingStates.add(ps_skipped); } private static HashSet finalProcessingStates = new HashSet(); static { stmtfinalProcessingStates.setInt(1,streamadd(ps_terminated); finalProcessingStates.add(ps_canceled); rset = stmtfinalProcessingStates.executeQueryadd(ps_success); // Execute the query, get Resultset finalProcessingStates.add(ps_failed); if (rset.next()) { finalProcessingStates.add(ps_skipped); } private static HashSet streamStates = new HashSet(); currentStatus = rset.getString("STREAMSTATUS" static { streamStates.add(ss_waiting); streamStates.add(ss_queued); parentStream = rset.getInt("PARENTSTREAM"streamStates.add(ss_running); streamStates.add(ss_success); } else { streamStates.add(ss_failed); streamStates.add(ss_terminating); throw new SQLException("No such stream", "", invalid_stream_exstreamStates.add(ss_terminated); streamStates.add(ss_canceling); streamStates.add(ss_canceled); } private static HashSet finalStreamStates = new stmt.closeHashSet(); static { //finalStreamStates.add(ss_terminated); finalStreamStates.add(ss_canceled); // Get a count of the Processes in each state for this Stream: finalStreamStates.add(ss_success); finalStreamStates.add(ss_failed); } private static boolean allComplete(Map procStatMap, // Map streamStatMap) { for (Iterator i stmt = connectionprocessingStates.prepareStatementiterator( ); i.hasNext();) { String state "select ProcessingStatus, count(ProcessingStatus) AS COUNT " + = (String)i.next(); int count = ((Integer)procStatMap.get(state)).intValue(); "from ProcessInstance "if + ( !finalProcessingStates.contains(state) && (count != 0) ) "where Stream = ? "return +false; } for (Iterator i "group by ProcessingStatus "= streamStates.iterator(); i.hasNext();) { String state = (String)i.next(); ); int count stmt.setInt(1,stream= ((Integer)streamStatMap.get(state)).intValue(); rsetif =( stmt!finalStreamStates.executeQuerycontains(state); // Execute the query, get Resultset && (count != 0) ) return false; } return true; } Map procStatCountsprivate =static newboolean HashMap(); all(String key, Map map) { int total = 0; for (Iterator i = processingStatesmap.values().iterator(); i.hasNext();) { total procStatCounts.put((String+= ((Integer)i.next(), new Integer(0)).intValue(); while (rset.next()) {} procStatCounts.put(rset.getString("PROCESSINGSTATUS"), new Integer(rset.getInt("COUNT"))); return ((Integer)map.get(key)).intValue() == total; } private static boolean any(String key, Map stmt.close(); map) { return ((Integer)map.get(key)).intValue() != //0; } public static String // Get a count of the sub-Streams in each state for this Stream: calculateStreamStatus(int stream) throws ClassNotFoundException { String retVal = ss_waiting; Connection connection = null; // Database connection object stmtResultSet rset = connection.prepareStatement(null; int parentStream = 0; "select StreamStatus, count(StreamStatus) AS COUNT " + try { // Get a Default Database Connection using Server Side JDBC Driver. "from Stream " + // Note : This class will be loaded on the "whereDatabase ParentStreamServer =and ?hence "use +a // Server Side JDBC Driver to "groupget bydefault StreamStatus" Connection to Database if (System.getProperty("java.vendor").toLowerCase().indexOf("oracle") != -1) );{ stmt.setInt(1, stream); // we're running as a stored procedure, rsetconnect = stmt.executeQuery(); locally: Map subStreamStatCountsconnection = new HashMap(DriverManager.getConnection("jdbc:default:connection"); for} (Iteratorelse i{ = streamStates.iterator(); i.hasNext();) // we're subStreamStatCounts.put((String)i.next(), new Integer(0)); while (rset.next()) {running outside the DB, connect via standard oracle jdbc driver: subStreamStatCountsClass.put(rset.getString("STREAMSTATUS"), new Integer(rset.getInt("COUNT")))forName("oracle.jdbc.driver.OracleDriver"); } connection = stmt.close(); if (currentStatus == ss_terminating) {DriverManager.getConnection("jdbc:oracle:thin:@glast-oracle02.slac.stanford.edu:1521:GLASTDEV","GLAST_DP_TEST","BT33%Q9]MU"); } // if (allComplete(procStatCounts, subStreamStatCounts)) { // Get information about current stream retVal = ss_terminated; // String currentStatus; } else { PreparedStatement stmt = connection.prepareStatement( retVal = ss_terminating; "select * " + } } else if (currentStatus == ss_canceling) {"from Stream " + if (allComplete(procStatCounts, subStreamStatCounts)) { "where Stream = ? " retVal = ss_canceled); stmt.setInt(1,stream); } else { retVal = ss_canceling; }rset = stmt.executeQuery(); // Execute the query, get Resultset } else if ( any(ps_running, procStatCounts) || any(ss_running, subStreamStatCounts) rset.next()) { retValcurrentStatus = ss_runningrset.getString("STREAMSTATUS"); } else if ( any(ps_queued, procStatCounts) || any(ps_submitted, procStatCounts) || any(ss_queued, subStreamStatCounts) ) { parentStream = rset.getInt("PARENTSTREAM"); } else { throw new SQLException("No such retVal = ss_queuedstream", "", invalid_stream_ex); } else if ( any(ps_waiting, procStatCounts) || any(ss_waiting, subStreamStatCounts) ) { stmt.close(); // retVal = ss_waiting; // Get a count of the }Processes elsein ifeach ( any(ps_failed, procStatCounts) || any(ss_failed, subStreamStatCounts) ) { state for this Stream: // retVal stmt = ss_failed;connection.prepareStatement( } else if ( all(ps_success, procStatCounts) && all(ss_success, subStreamStatCounts) ) { "select ProcessingStatus, count(ProcessingStatus) AS COUNT " + retVal = ss_success; "from ProcessInstance " + } stmt = connection.prepareStatement("updatewhere Stream set StreamStatus = ? " where+ Stream = ?"); "group by ProcessingStatus " stmt.setString(1,retVal ); stmt.setInt(21,stream); rset = stmt.executeUpdateexecuteQuery(); // Execute the query, if (parentStream != 0) get Resultset Map procStatCounts = new calculateStreamStatusHashMap(parentStream); } catchfor (SQLException ex) { // Trap SQL Errors Iterator i = processingStates.iterator(); i.hasNext();) procStatCounts.put((String)i.next(), new ex.printStackTraceInteger(0)); } finally { trywhile (rset.next()) { if (connection != null || !connection.isClosed())procStatCounts.put(rset.getString("PROCESSINGSTATUS"), new Integer(rset.getInt("COUNT"))); } connection stmt.close(); // Close the database connection // // } catch(SQLException ex){ ex.printStackTrace(); Get a count of the sub-Streams in each state for this Stream: // } stmt = } connection.prepareStatement( return retVal; } } |
Code Block |
---|
%ORACLE_HOME%\bin\loadjava -user=GLAST_DP_TEST/BT33%%Q9]MU@glast-oracle02.slac.stanford.edu:1521:GLASTDEV -verbose -force -resolve %project_base%\src\main\java\org\glast\pipeline\server\sql\sp\*.java |
No Format |
---|
set CLASSPATH=%ORACLE_HOME%\sqlj\lib\translator.jar;%ORACLE_HOME%\sqlj\lib\runtime12.jar;%ORACLE_HOME%\jdbc\lib\ojdbc14.jar;%ORACLE_HOME%\sqlj\lib\utl_dbws.jar;%ORACLE_HOME%\jdbc\lib\orai18n.jar;%ORACLE_HOME%\sqlj\runtime12ee.jar;%ORACLE_HOME%\jpub\lib\jpub.jar;%ORACLE_HOME%\sqlj\lib\sqljutl.jar
%ORACLE_HOME%\bin\jpub -user=glast_dp_test/BT33%%Q9]MU -url=jdbc:oracle:thin:@glast-oracle02.slac.stanford.edu:1521:GLASTDEV -java=org.glast.pipeline.server.sql.sp.* -package=org.glast.pipeline.server.sql.spclient -compile=false -dir=%project_base%\src\main\java\
|
Code Block |
---|
package org.glast.pipeline.server.sql.spclient; public class SPStream { public SPStream(java.sql.Connection conn) throws java.sql.SQLException { m_ctx = new sqlj.runtime.ref.DefaultContext(conn); } // MORE GENERATED CODE HERE <clipped> public java.lang.String calculateStreamStatus(int p0) throws java.lang.ClassNotFoundException { Object __jRt_0 = null; "select StreamStatus, count(StreamStatus) AS COUNT " + "from Stream " + "where ParentStream = ? " + "group by StreamStatus" ); stmt.setInt(1, stream); rset = stmt.executeQuery(); Map subStreamStatCounts = new HashMap(); for (Iterator i = streamStates.iterator(); i.hasNext();) subStreamStatCounts.put((String)i.next(), new Integer(0)); while (rset.next()) { subStreamStatCounts.put(rset.getString("STREAMSTATUS"), new Integer(rset.getInt("COUNT"))); } stmt.close(); if (currentStatus == ss_terminating) { if (allComplete(procStatCounts, subStreamStatCounts)) { retVal = ss_terminated; } else { retVal = ss_terminating; } } else if (currentStatus == ss_canceling) { if (allComplete(procStatCounts, subStreamStatCounts)) { retVal = ss_canceled; } else { retVal = ss_canceling; } } else if ( any(ps_running, procStatCounts) || any(ss_running, subStreamStatCounts) ) { retVal = ss_running; } else if ( any(ps_queued, procStatCounts) || any(ps_submitted, procStatCounts) || any(ss_queued, subStreamStatCounts) ) { retVal = ss_queued; } else if ( any(ps_waiting, procStatCounts) || any(ss_waiting, subStreamStatCounts) ) { retVal = ss_waiting; } else if ( any(ps_failed, procStatCounts) || any(ss_failed, subStreamStatCounts) ) { retVal = ss_failed; } else if ( all(ps_success, procStatCounts) && all(ss_success, subStreamStatCounts) ) { retVal = ss_success; } stmt = connection.prepareStatement("update Stream set StreamStatus = ? where Stream = ?"); stmt.setString(1,retVal); stmt.setInt(2,stream); stmt.executeUpdate(); if (parentStream != 0) calculateStreamStatus(parentStream); } catch (SQLException ex) { // Trap SQL Errors ex.printStackTrace(); } finally { try { __jRt_0 = oracle.jpub.reflect.Client.invoke(_context(),null, "org.glast.pipeline.server.sql.sp.SPStream","calculateStreamStatus","I",new Object[]{new java.lang.Integer(p0)}); }if (connection != null || !connection.isClosed()) catch (java.lang.ClassNotFoundException e) { connection.close(); throw e; // Close the database }connection catch (Throwable e) { } e.printStackTrace();catch(SQLException ex){ } return (java.lang.String)__jRt_0; } } |
Code Block |
---|
CREATE OR REPLACE PACKAGE SP_STREAM
AS
-- Package-specific types:
TYPE CURSOR IS REF CURSOR;
-- public static String calculateStreamStatus(int stream)
FUNCTION calculateStreamStatus(Stream_in IN number) RETURN varchar2;
END SP_STREAM;
/
CREATE OR REPLACE PACKAGE BODY SP_STREAM
AS
FUNCTION calculateStreamStatus(Stream_in IN number) RETURN varchar2 IS
LANGUAGE JAVA
NAME 'org.glast.pipeline.server.sql.sp.SPStream.calculateStreamStatus(int) return java.lang.String';
END SP_STREAM;
/
|
Code Block |
---|
PROCEDURE SetProcessInstanceStatus(ProcessInstance_in IN int, ProcessingStatus_in IN VARCHAR2, transitionTime_in IN TimeStamp) IS
ProcessInstanceRow_out ProcessInstance%ROWTYPE;
ProcessType_out ProcessType.ProcessType%TYPE;
StreamStatus_out StreamStatus.StreamStatus%TYPE;
BEGIN
select *
into ProcessInstanceRow_out
from ProcessInstance
where ProcessInstance = ProcessInstance_in;
select ProcessType
into ProcessType_out
from Process
where Process = ProcessInstanceRow_out.Process;
IF 0 = GetStateTransitionValid(ProcessInstanceRow_out.ProcessingStatus, ProcessingStatus_in, ProcessType_out) THEN
RAISE_APPLICATION_ERROR(invalid_status_transition_ex,
'Not a valid state transition from ' ||
ProcessInstanceRow_out.ProcessingStatus ||
' to ' ||
ProcessingStatus_in ||
' for a process of type ' ||
ProcessType_out ||
'.');
RETURN;
END IF;
update ProcessInstance
set ProcessingStatus = ProcessingStatus_in
where ProcessInstance = ProcessInstance_in;
IF ps_submitted = ProcessingStatus_in THEN
update ProcessInstance
set SubmitDate = transitionTime_in
where ProcessInstance = ProcessInstance_in;
ELSIF ps_running = ProcessingStatus_in THEN
update ProcessInstance
set StartDate = transitionTime_in
where ProcessInstance = ProcessInstance_in;
ELSIF ps_success = ProcessingStatus_in OR ps_failed = ProcessingStatus_in THEN
update ProcessInstance
set EndDate = transitionTime_in
where ProcessInstance = ProcessInstance_in;
END IF;
CheckProcessDependents(ProcessInstanceRow_out.Process, ProcessInstanceRow_out.Stream, ProcessingStatus_in);
StreamStatus_out := SP_STREAM.calculateStreamStatus(ProcessInstanceRow_out.Stream);
END;
|
Code Block |
---|
public void setProcessInstanceStatus(int processInstance, ProcessingStatus newProcessingStatus, Timestamp transitionTime) throws InvalidStatusTransitionException, SQLException
{
CallableStatement stmt = connection.prepareCall("{call DATA_ACCESS.SetProcessInstanceStatus(?,?,?)}");
try
{
stmt.setInt(1, processInstance);
stmt.setString(2, newProcessingStatus.toString());
stmt.setTimestamp(3, transitionTime);
stmt.execute();
}
catch(SQLException x)
{
int errorCode = x.getErrorCode();
if (errorCode == InvalidStatusTransitionException.errorCode)
throw new InvalidStatusTransitionException(x);
else
throw x;
}
finally
{
stmt.close();
}
}
|
ex.printStackTrace();
}
}
return retVal;
}
}
|
Loading Java:
Code Block |
---|
%ORACLE_HOME%\bin\loadjava -user=GLAST_DP_TEST/BT33%%Q9]MU@glast-oracle02.slac.stanford.edu:1521:GLASTDEV -verbose -force -resolve %project_base%\src\main\java\org\glast\pipeline\server\sql\sp\*.java
|
Dropping Java:
Code Block |
---|
%ORACLE_HOME%\bin\dropjava -user "GLAST_DP_TEST/BT33%Q9]MU@glast-oracle02.slac.stanford.edu:1521:GLASTDEV" -verbose org.glast.pipeline.server.sql.sp.OraEnv
|
Publishing (previously loaded) Java:
No Format |
---|
set CLASSPATH=%ORACLE_HOME%\sqlj\lib\translator.jar;%ORACLE_HOME%\sqlj\lib\runtime12.jar;%ORACLE_HOME%\jdbc\lib\ojdbc14.jar;%ORACLE_HOME%\sqlj\lib\utl_dbws.jar;%ORACLE_HOME%\jdbc\lib\orai18n.jar;%ORACLE_HOME%\sqlj\runtime12ee.jar;%ORACLE_HOME%\jpub\lib\jpub.jar;%ORACLE_HOME%\sqlj\lib\sqljutl.jar
%ORACLE_HOME%\bin\jpub -user=glast_dp_test/BT33%%Q9]MU -url=jdbc:oracle:thin:@glast-oracle02.slac.stanford.edu:1521:GLASTDEV -java=org.glast.pipeline.server.sql.sp.* -package=org.glast.pipeline.server.sql.spclient -compile=false -dir=%project_base%\src\main\java\
|
Code Block |
---|
package org.glast.pipeline.server.sql.spclient;
public class SPStream
{
public SPStream(java.sql.Connection conn) throws java.sql.SQLException
{ m_ctx = new sqlj.runtime.ref.DefaultContext(conn); }
// MORE GENERATED CODE HERE <clipped> public java.lang.String calculateStreamStatus(int p0)
throws java.lang.ClassNotFoundException
{
Object __jRt_0 = null;
try {
__jRt_0 = oracle.jpub.reflect.Client.invoke(_context(),null, "org.glast.pipeline.server.sql.sp.SPStream","calculateStreamStatus","I",new Object[]{new java.lang.Integer(p0)});
}
catch (java.lang.ClassNotFoundException e) {
throw e;
}
catch (Throwable e) {
e.printStackTrace();
}
return (java.lang.String)__jRt_0;
}
}
|
Code Block |
---|
CREATE OR REPLACE PACKAGE SP_STREAM
AS
-- Package-specific types:
TYPE CURSOR IS REF CURSOR;
-- public static String calculateStreamStatus(int stream)
FUNCTION calculateStreamStatus(Stream_in IN number) RETURN varchar2;
END SP_STREAM;
/
CREATE OR REPLACE PACKAGE BODY SP_STREAM
AS
FUNCTION calculateStreamStatus(Stream_in IN number) RETURN varchar2 IS
LANGUAGE JAVA
NAME 'org.glast.pipeline.server.sql.sp.SPStream.calculateStreamStatus(int) return java.lang.String';
END SP_STREAM;
/
|
a