Java Stored Proc, passing BLOB, not stored in a table.
I have checked this article, and found it will not suit my needs.
http://otn.oracle.com/sample_code/tech/java/codesnippet/jdbc/lob/LobToSP.html
I have even looked at the 4 articles on the "JSP How-To Documents" page.
I need to pass in a BLOB to my Java Stored proc, but not store it in the DB - My java code manipulates the LOB and it should never go into the DB. I know I could do the normal store, get an id and pass to my JSP... but that is a poor way to implement this. Are there any code samples on how to do this please ?
D
WOW! That seems like a very bad design.
Is it just the compiler that has the problem or is the PL/SQL code inside the stored procedure also affected? For example, if I'm doing an
EXECUTE IMMEDIATE 'insert ... INTO OtherSchema.tblTest';
Is this going to be a problem?
The problem with granting the access explicitly is the Archive Schema, which has the stored procedure that is failing, might not exist at the time when the other schemas are created. Therefore, there is no user to grant permissions to. I solved this by granting permissions to the role and when the archive user is created it is assigned that role.
This seems like the proper way to solve this problem.
Similar Messages
-
How to pass XMLType as parameters to Java stored procs ?
How to pass XMLType as parameters to Java stored procs ?
ORA-00932: inconsistent datatypes: expected an IN argument at position 1 that is an instance of an Oracle type convertible to an instance of a user defined Java class got an Oracle type that could not be converted to a java class
Java stored proc -->
CREATE or replace FUNCTION testJavaStoredProcMerge( entity xmltype,event xmltype ) RETURN VARCHAR2 AS LANGUAGE JAVA
NAME 'XDBMergeOp.merge(org.w3c.dom.Document,org.w3c.dom.Document) return java.lang.String';
PL/SQL -->
declare
theQuote VARCHAR2(50);
entity xmltype;
event xmltype;
begin
entity := xmltype('<Quote><Fields><Field1>f1</Field1></Fields></Quote>');
event := xmltype('<Quote><Fields><Field2>f2</Field2></Fields></Quote>');
theQuote := testJavaStoredProcMerge(entity,event);
dbms_output.put_line(theQuote);
end;
Java class -->
public class XDBMergeOp {
public static String merge(Document entity, Document event) throws Exception {
return ...
Thanks in advance.I think you'll need to use XMLType and then extract the DOM inside java..
create or replace package SAXLOADER
as
procedure LOAD(P_PARAMETERS XMLTYPE, P_DATASOURCE BFILE);
end;
create or replace package body SAXLOADER
as
procedure LOAD(P_PARAMETERS XMLTYPE, P_DATASOURCE BFILE)
AS
LANGUAGE JAVA
NAME 'com.oracle.st.xmldb.pm.saxLoader.SaxProcessor.saxLoader ( oracle.xdb.XMLType, oracle.sql.BFILE)';
end;
public static void saxLoader(XMLType parameterSettings, BFILE dataSource)
throws Exception {
Document parameters = parameterSettings.getDocument();
SaxProcessor app = new SaxProcessor(parameters);
app.processXMLFile(dataSource);
Edited by: mdrake on Apr 6, 2009 11:28 AM -
How to pass a refcursor to a java stored proc
Hi all,
Please forgive me as I am new to Java and JDeveloper....
I want to pass a refcursor to a java stored proc. Does anyone know how to accomplish this?
Thanks,
dayneoHi,
As Avi has indicated, you can map ref cursor to java.sql.ResultSet
here are Call Specs and a code snippet from chapter 3 in my book.
procedure rcproc(rc OUT EmpCurTyp)
as language java
name 'refcur.refcurproc(java.sql.ResultSet[])';
function rcfunc return EmpCurTyp
as language java
name 'refcur.refcurfunc() returns java.sql.ResultSet';
* Function returning a REF CURSOR
public static ResultSet refcurfunc () throws SQLException
Connection conn = null;
conn = DriverManager.getConnection("jdbc:oracle:kprb:");
((OracleConnection)conn).setCreateStatementAsRefCursor(true);
Statement stmt = conn.createStatement();
((OracleStatement)stmt).setRowPrefetch(1);
ResultSet rset = stmt.executeQuery("select * from EMP order by empno");
// fetch one row
if (rset.next())
System.out.println("Ename = " + rset.getString(2));
return rset;
Kuassi -
I'm trying to develop a java stored procedure on Oracle 10.1.2 that makes use of many other libraries, (Axis, WSIF, custom libs), and I'm stuck on this permissions error. I've loaded all of the libs into the same schema under the same user, (with JAVA_ADMIN), and several other privileges. I loaded the files using the following command, "loadjava -verbose -debug -recursivejars -genmissing -resolve -time -fileout loadJava.log -user {userID}/{pwd}@{SID} someJar.jar". The error occurs when a call to WSIFProperties.getProperty attempts to access the org.apache.wsif.mapper or org.apache.wsif.mappingconvention properties.
In a normal java2 environment, I'd simply edit the java.policy file to provide permissions to the codebase (file:/C:/spi4j2.5.4_J2ee1.4/coreLib/fsgWsif1.1.jar). Since Oracle doesn't have ProtectionDomains, if I add read permissions for those properties using the following command, "call dbms_java.grant_permission( 'SCHEMANAME', 'SYS:java.util.PropertyPermission', 'org.apache.wsif.mapper', 'read' )", it seems as if all of the other classes in the schema should be able to read the property, right? It appears the logfile dump below is showing the permissions that the classloader recognizes. Where did he get those? If they came from the DBA_JAVA_POLICY view, then why can't it pick up on the fact that I've granted read permission to the property it's trying to read? When I tried loading the classes without using the -recursivejars option, I got all kinds of ClassDefNotFound errors and couldn't even start the program, (I guess because it'd loaded the other jars as resources instead of unpacking the classes, the resolver couldn't look into the jars and locate the classes that it needed). The program works just fine outside of the database, (even without me adding read permissions for the codebase to access the properties in the java.policy file). Any help would be greatly appreciated. Thanks in advance.
Error shown below:
[2008-03-20 18:23:18.144] [DEBUG] [Root Thread] [org.apache.wsif.*][org.apache.wsif.logging.Trc] [traceIt] [Trc.java:1308] EVENT WSIFMapperFactory.newMapper Caught and handled throwable: java.security.AccessControlException: the Permission (java.util.PropertyPermission org.apache.wsif.mapper read) has not been granted to ProtectionDomain (file:/C:/spi4j2.5.4_J2ee1.4/coreLib/fsgWsif1.1.jar <no certificates>)
com.fds.classloader.ParentLastUrlClassLoader@e87f10c1
<no principals>
java.security.Permissions@c5dd7492 (
(java.io.FilePermission \C:\spi4j2.5.4_J2ee1.4\coreLib\fsgWsif1.1.jar read)
(java.net.SocketPermission localhost:1024- listen,resolve)
(java.util.PropertyPermission java.version read)
(java.util.PropertyPermission java.vm.name read)
(java.util.PropertyPermission java.vm.vendor read)
(java.util.PropertyPermission os.name read)
(java.util.PropertyPermission java.vendor.url read)
(java.util.PropertyPermission java.vm.specification.vendor read)
(java.util.PropertyPermission java.specification.vendor read)
(java.util.PropertyPermission os.version read)
(java.util.PropertyPermission java.specification.name read)
(java.util.PropertyPermission java.class.version read)
(java.util.PropertyPermission file.separator read)
(java.util.PropertyPermission java.vm.version read)
(java.util.PropertyPermission os.arch read)
(java.util.PropertyPermission java.vm.specification.name read)
(java.util.PropertyPermission java.vm.specification.version read)
(java.util.PropertyPermission java.specification.version read)
(java.util.PropertyPermission java.vendor read)
(java.util.PropertyPermission path.separator read)
(java.util.PropertyPermission line.separator read)
)hi rzander,
I am in a situation similar to your :
{color:#ff0000}Caused by: java.security.AccessControlException: the Permission (java.io.FilePermission /home/neogeo/Java_Resources.jrxml read) has not been granted to ProtectionDomain (file:/home/neogeo/lib/jasperreports-3.0.0.jar <no signer certificates>)
AppClassLoader: file:/home/neogeo/lib/xml-apis.jar file:/home/neogeo/lib/jpa.jar file:/home/neogeo/lib/jdt-compiler-3.1.1.jar file:/home/neogeo/lib/png-encoder-1.5.jar file:/home/neogeo/lib/ant-1.5.1.jar file:/home/neogeo/lib/jaxen-1.1.1.jar file:/home/neogeo/lib/mondrian-2.3.2.8944.jar file:/home/neogeo/lib/commons-javaflow-20060411.jar file:/home/neogeo/lib/batik-bridge.jar file:/home/neogeo/lib/antlr-2.7.5.jar file:/home/neogeo/lib/batik-parser.jar file:/home/neogeo/lib/hibernate3.jar file:/home/neogeo/lib/batik-ext.jar file:/home/neogeo/lib/commons-logging-1.0.2.jar file:/home/neogeo/lib/jasperreports-3.0.0.jar file:/home/neogeo/lib/batik-svggen.jar file:/home/neogeo/lib/batik-xml.jar file:/home/neogeo/lib/xml-apis-ext.jar file:/home/neogeo/lib/batik-dom.jar file:/home/neogeo/lib/jakarta-bcel-20050813.jar file:/home/neogeo/lib/servlet.jar file:/home/neogeo/lib/hsqldb-1.7.1.jar file:/home/neogeo/lib/batik-gvt.jar file:/home/neogeo/lib/batik-svg-dom.jar file:/home/neogeo/lib/jxl-2.6.jar file:/home/neogeo/lib/groovy-all-1.5.5.jar file:/home/neogeo/lib/xercesImpl.jar file:/home/neogeo/lib/batik-awt-util.jar file:/home/neogeo/lib/bsh-2.0b4.jar file:/home/neogeo/lib/commons-digester-1.7.jar file:/home/neogeo/lib/batik-css.jar file:/home/neogeo/lib/commons-logging-api-1.0.2.jar file:/home/neogeo/lib/jfreechart-1.0.0.jar file:/home/neogeo/lib/itext-1.3.1.jar file:/home/neogeo/lib/poi-3.0.1-FINAL-20070705.jar file:/home/neogeo/lib/batik-util.jar file:/home/neogeo/lib/commons-beanutils-1.7.jar file:/home/neogeo/lib/jcommon-1.0.0.jar file:/home/neogeo/lib/saaj-api-1.3.jar file:/home/neogeo/lib/batik-script.jar file:/home/neogeo/lib/xalan.jar file:/home/neogeo/lib/batik-anim.jar file:/home/neogeo/lib/commons-collections-2.1.jar
<no principals>
java.security.Permissions@1aebb385 (
(java.io.FilePermission /home/neogeo/lib/jasperreports-3.0.0.jar read)
(java.util.PropertyPermission user.language write)
(java.util.PropertyPermission * read)
(java.lang.RuntimePermission modifyThreadGroup)
(java.lang.RuntimePermission createSecurityManager)
(java.lang.RuntimePermission modifyThread)
(java.lang.RuntimePermission preferences)
(java.lang.RuntimePermission exitVM)
(oracle.aurora.security.JServerPermission LoadClassInPackage.*)
{color}
{color:#ff0000}
at java.security.AccessControlContext.checkPermission(AccessControlContext.java)
at java.security.AccessController.checkPermission(AccessController.java)
at java.lang.SecurityManager.checkPermission(SecurityManager.java)
at oracle.aurora.rdbms.SecurityManagerImpl.checkPermission(SecurityManagerImpl.java)
at java.lang.SecurityManager.checkRead(SecurityManager.java)
at java.io.FileInputStream.<init>(FileInputStream.java)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:167)
at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:152)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:150)
... 9 more{color}
I followed your help creating the file "ORACLE_HOME/javavm/lib/security / java.policy", but I still get the same exception.
Please, can you post the contents of your java.policy to understand how you set the permissions ?
Edited by: NeOGeO on 11-nov-2008 6.43 -
ORA-03113 error when running the Java stored proc demos
Hi there,
Has anyone else run into this issue. When attempting to transfer an object type from Java to Oracle - through a Java stored proc - the session crashes with:
ORA-03113: end-of-file on communication channelLooking in the trace file generated the error message looks something like:
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [0x8fe04468] [SIGTRAP] [unknown code] [0x8FE59034] [] []
Current SQL statement for this session:
select pointruntime.jdistance(point(1, 2), point(2, 3)) from dual
----- Call Stack Trace -----
calling call entry argument values in hex
location type point (? means dubious value)
ksedmp+764 call ksedst 0 ? 2C4F4A ? 2C ? 98968000 ?
DB02C ? 27A50000 ?
ssexhd+956 call ksedmp 3 ? 0 ? 8FE5E790 ? 5905870 ?
8FE0434C ? 40895E4 ?
0x9012c860 call ssexhd 5 ? BFFEEF70 ? BFFEEFB0 ? 0 ?
0 ? 0 ?As you can see from the trace snippet above, I was attempting to run one of the Oracle Java stored procedure demos. Has anyone successfully run those demos? Specifically the ones where complex types (table objects or the Point object) are passed back to Oracle from the JVM.
I would appreciate some help with this. The code works fine in a Windows or Solaris environment but barfs on Apple. Truly annoying....
Anyone?
Thanks in advance,
AlexYes,
Apologies for not stating that information, Steve. Was a bit naughty of me! I guess the reason I didn't was because I just wanted to hear if anyone else running Oracle on Mac received such errors when executing the Java stored proc demos (specifically, the execution of PointRuntime.jDistance). Nevertheless, here's the relevant info from the trace file:
Dump file /Users/oracle/admin/sandbox/udump/sandbox_ora_1861.trc
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
ORACLE_HOME = /Users/oracle/product/10.1.0/db
System name: Darwin
Node name: maczilla.local
Release: 8.3.0
Version: Darwin Kernel Version 8.3.0: Mon Oct 3 20:04:04 PDT 2005; root:xnu-792.6.22.obj~2/RELEASE_PPC
Machine: Power Macintosh
Instance name: sandbox
Redo thread mounted by this instance: 1
Oracle process number: 10
Unix process pid: 1861, image: [email protected] for the Java version, according to the readme file in the javavm directory, I am running 1.4.1:
1.5 Java Compatibility
This release has been thoroughly tested with Sun's Java Compatibility
Kit for the JDK 1.4.1. Oracle is committed to OracleJVM keeping pace
with Java and other Internet standards. -
Size limitation that can be passed to Java stored procedure
Hello!
I enjoy using Oracle8i these days. But I have some questions
about Java stored procedure. I want to pass the XML data to Java
stored procedure as IN parameter. But I got some errors when the
data size is long. Is there any limitation in the data size that
can be passed to Java stored procedure?
Would you please help me ?
This message is long, but would you please read my message?
Contents
1. Outline : I write what I want to do and the error message I
got
2. About the data size boundary: I write about the boundary
size. I found that it depend on which calling sequence I use.
3. The source code of the Java stored procedure
4. The source code of the Java code that call the Java stored
procedure
5. The call spec
6. Environment
1.Outline
I want to pass the XML data to Java stored procedure. But I got
some errors when the data size is long. The error message I got
is below.
[ Error messages and stack trace ]
java.sql.SQLException: ORA-01460: unimplemented or unreasonable
conversion reque
sted
java.sql.SQLException: ORA-01460: unimplemented or unreasonable
conversion reque
sted
at oracle.jdbc.ttc7.TTIoer.processError(Compiled Code)
at oracle.jdbc.ttc7.Oall7.receive(Compiled Code)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(Compiled Code)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch
(TTC7Protocol.java:721
at oracle.jdbc.driver.OracleStatement.doExecuteOther
(Compiled Code)
at oracle.jdbc.driver.OracleStatement.doExecuteWithBatch
(Compiled Code)
at oracle.jdbc.driver.OracleStatement.doExecute(Compiled
Code)
at
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(Compiled
Code
at
oracle.jdbc.driver.OraclePreparedStatement.executeUpdate
(OraclePrepar
edStatement.java:256)
at oracle.jdbc.driver.OraclePreparedStatement.execute
(OraclePreparedStat
ement.java:273)
at javaSp.javaSpTestMain.sample_test
(javaSpTestMain.java:37)
at javaSp.javaSpTestMain.main(javaSpTestMain.java:72)
2. About the data size boundary
I don|ft know the boundary that I got errors exactly, but I
found that the boundary will be changed if I use |gprepareCall("
CALL insertData(?)");|h or |gprepareCall ("begin insertData
(?); end ;")|h.
When I use |gprepareCall(" CALL insertData(?)".
The data size 3931 byte --- No Error
The data size 4045 byte --- Error
Whne I use prepareCall ("begin insertData(?); end ;")
The data size 32612 byte --No Error
The data size 32692 byte --- Error
3. The source code of the Java stored procedure
public class javaSpBytesSample {
public javaSpBytesSample() {
public static int insertData( byte[] xmlDataBytes ) throws
SQLException{
int oraCode =0;
String xmlData = new String(xmlDataBytes);
try{
Connection l_connection; //Database Connection Object
//parse XML Data
dits_parser dp = new dits_parser(xmlData);
//Get data num
int datanum = dp.getElementNum("name");
//insesrt the data
PreparedStatement l_stmt;
for( int i = 0; i < datanum; i++ ){
l_stmt = l_connection.prepareStatement("INSERT INTO test
" +
"(LPID, NAME, SEX) " +
"values(?, ?, ?)");
l_stmt.setString(1,"LIPD_null");
l_stmt.setString(2,dp.getElemntValueByTagName("name",i));
l_stmt.setString(3,dp.getElemntValueByTagName("sex",i));
l_stmt.execute();
l_stmt.close(); //Close the Statement
l_stmt = l_connection.prepareStatement("COMMIT"); //
Commit the changes
l_stmt.execute();
l_stmt.close(); //Close the Statement l_stmt.execute
(); // Execute the Statement
catch(SQLException e ){
System.out.println(e.toString());
return(e.getErrorCode());
return(oraCode);
4. The source code of the Java code that call the Java stored
procedure
public static void sample_test(int num) {
//make data
Patient p = new Patient();
byte[] xmlData = p.generateXMLData(num);
try{
// Load the Oracle JDBC driver
DriverManager.registerDriver(new
oracle.jdbc.driver.OracleDriver());
Connection m_connection = DriverManager.getConnection
("jdbc:oracle:thin:@max:1521:test",
"testuser", "testuser");
CallableStatement l_stmt =
// m_connection.prepareCall(" CALL insertData(?)");
m_connection.prepareCall("begin insertData(?); end
l_stmt.setBytes(1,xmlData);
l_stmt.execute();
l_stmt.close();
System.out.println("SUCCESS to insert data");
catch(SQLException e ){
System.out.println( e.toString());
e.printStackTrace();
5. The call spec
CREATE OR REPLACE PROCEDURE insertData( xmlData IN LONG RAW)
AS
LANGUAGE JAVA NAME 'javaSp.javaSpBytesSample.insertData(byte[])';
6. Environment
OS: Windows NT 4.0 SP3
RDBMS: Oracle 8i Enterprise Edition Release 8.1.5.0.0 for
Windows NT
JDBC Driver: Oracle JDBC Drivers 8.1.5.0.0.
JVM: Java1.1.6_Borland ( The test program that call Java stored
procedure run on this Java VM)
nullIam passing an array of objects from Java to the C
file. The total size of data that Iam sending is
around 1GB. I have to load this data into the Shared
memory after getting it in my C file. Iam working on
HP-UX (64-bit). Everything works fine for around 400MB
of data. When I try to send around 500MB of data, the
disk utilization becomes 100%, so does my memory
utilization and I get a "Not enough space" when I try
to access shared memory. I have allocated nearly 2.5GB
in my SHMMAX variable. Also, I have around 45GB of
disk free. The JVM heap size is also at 2048MB. Where did you get the 400/500 number from? Is that the size of the file?
What do you do with the data? Are you doing nothing but copying it byte for byte into shared memory?
If yes then a simple test is to write a C application that does the same thing. If it has problems then it means you have an environment problem.
If no then you are probably increasing the size of the data by creating a structure to hold it. How much overhead does that add to the size of the data? -
XML Parsing in Java Stored Proc--Oracle XML Support Installation?
I am working with a third party product that is having difficulty running a java stored proc that is parsing a supplied XML file. The proc basically looks like:
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
InputStream is = getXMLAsInputStream(xml);
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( is );
... parse the document ....
catch (FactoryConfigurationError e) {
// unable to get a document builder factory
We are running on 9.2.0.6, HP-UX 64-bit. At first, when we would attempt to run the proc, a database hang would occur; now after attempting to install using loadjava jars for xerces2.6: ORA-29532: Java call terminated by uncaught Java exception:
javax.xml.parsers.FactoryConfigurationError: Provider
org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found)
The vendor says that the errors we are getting when running are not due to any dependency on xerces or jre1.4, and that we need to "install Oracle XML support", but I'm not certain what this means (I cannot find any documentation on what to install). I believe that there are jars that need to be loaded into the database to support the XML parsing, as jre1.3 does not include built-in XML support, and Oracle 9.2.0.6 uses jre1.3.
So...does anyone have any thoughts as to how to resolve the missing references? Is there a way to "install Oracle XML support", or is it to install the necessary jars?
Thanks,
CandiCandi,
The following resources should be of help:
Oracle9i Database Release 2 (9.2) Documentation Library
In particular, check out the following:
Java Developer's Guide
Java Stored Procedures Developer's Guide
XML API Reference - XDK and Oracle XML DB
XML Database Developer's Guide - Oracle XML DB
XML Developer's Kits Guide - XDK
If that doesn't help, then try the following:
OracleJVM and Java Stored Procedures
XML Technology Center
Good Luck,
Avi. -
Parse XML in a java stored proc
I am trying to parse an xml document in a java stored procedure. Just following my nose, I have developed a stored proc that works fine in development (outside the database using JRE 1.4.1) using the Xerces 2.5 parser. But, after having transferred the xerces xercesImpl.jar, xmlapis.jar, and my implementation class into oracle using loadjava when I call my stored proc the code throws an exception trying to build the document with an error like:
NoClassDef exception org.apache.xerces.jaxp.DocumentFactoryBuilderImpl
My Code looks like this:
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;
InputStream is = getXMLAsInputStream(xml);
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse( is );
... parse the document ....
catch (FactoryConfigurationError e) {
// unable to get a document builder factory
The exception caught is a FactoryConfigurtionError.
I'm not particularly attached to xerces, I'm really just looking for a way to parse XML inside my java stored proc, so any help to solve my problem, or an alternative suggestion will be greatly appreciated.
thanks
DaleI looked again and sure enough the xerces implementation classes were missing. I had run a .cmd file containing these two lines, but it looks like only the first one ran...
loadjava -u ncc/xyz@usd -v -r M:\Database\JavaGeocode\Xerces2_5_0\xml-apis.jar
loadjava -u ncc/xyz@usd -v -r M:\Database\JavaGeocode\Xerces2_5_0\xercesImpl.jar
Now I've got everything working fine with Xerces!
Dale -
hi i just now learnt how to write a
simple java proc
load java class
publish
call the function
but how is this used by java people?
for example.......
i have a java class and inside it i have a method that accepts an input parameter.
the input parameter is like below
i have a table ... and a trigger on it when ever new insert/update takes place i have to pass the newly updated value for the column to the java program as the parameter so that they can process with that data
how to achieve this
any material that i can study for this ?
rajthis is what is written in the mail for me
1. write java class with a method to call the refresh code. (cache)
2. load this into oracle using loadjava as a oracle procedure.
3. create a trigger after insert/update/delete on the table in question.
4. call the java method in the trigger
Java class--->
HttpCallout.java (attached)
Loading into Oracle as a procedure.--->
loadjava -thin -verbose -user user/pass@DB HttpCallout.java
create the trigger & call the java method--->
JWCache.sql (attached)
programs 1 thats attached to the file .............................................
// Packages for http client library
import HTTPClient.HTTPResponse;
import HTTPClient.HTTPConnection;
* This java stored procedure is attached as trigger to product_information
* table. Any changes to the product_information table results in invocation of
* this stored procedure which in turn call a JSP to invalidate the web object
* cache that caches the product information
public class HttpCallout {
* This method establishes a http connection with the specified url
public static void getURL( String hostname, String portnum, String url ) throws InterruptedException{
try {
// Process arguments
String protocol = "http";
String host = hostname;
int port = Integer.parseInt(portnum);
String page = url;
// Grab HTTPConnection
HTTPConnection con = new HTTPConnection( protocol, host, port);
con.setTimeout(20000);
con.setAllowUserInteraction(false);
// Issue Get call
HTTPResponse rsp = con.Get(page);
// Terminate the connection
con.stop();
} catch( Throwable ex ) {
ex.printStackTrace();
another program tats atached to file
Rem This SQL Script publishes the java stored procedure to the database
Rem and creates a trigger for invoking the java stored procedure
Rem
CREATE OR REPLACE PROCEDURE getURL( p1 IN VARCHAR2,
p2 IN VARCHAR2,
p3 IN VARCHAR2) AS
LANGUAGE JAVA NAME 'HttpCallout.getURL(java.lang.String, java.lang.String, java.lang.String)';
CREATE OR REPLACE TRIGGER callout_trig AFTER INSERT OR DELETE OR UPDATE
ON product_information
BEGIN
getURL('<server-host-name>:<port>','/jwcache/productinfo/JDBCInv.jsp');
END;
/ -
Is there a problem with all enums called from Java stored procedures? Has anyone gotten this to work?
Here is the enum:
public enum OscarType
BreadthFirst,
DepthFirst;
public static String hello(){
return "hello";
The client is running jdk 1.6_04. The server is running jdk 1.6_13. We have tried compiling client side and server side. It results in the same error.
Invoking a stored proc that calls the static method hello results in:
Error report:
ORA-29516: Aurora assertion failure: Assertion failure at eox.c:342
Uncaught exception System error: java/lang/UnsupportedClassVersionError
ORA-06512: at "TLMDEV.TESTJAVASTOREDPROCMERGE", line 1
ORA-06512: at line 8
29516. 00000 - "Aurora assertion failure: %s"
*Cause: An internal error occurred in the Aurora module.
*Action: Contact Oracle Worldwide Support.
The following query shows the JAVA CLASS OscarType to have a status of VALID.
SELECT status,object_type,dbms_java.longname(object_name) FROM user_objects
WHERE object_type IN ('JAVA SOURCE', 'JAVA CLASS', 'JAVA RESOURCE')
and dbms_java.longname(object_name)='OscarType';Wrong version of Java. 1.6. was not installed on the server. Issue resolved.
-
Java Stored Proc and Oracle 8.0.6.20?
Hi,
I have a customer using Oracle 8.0.6 (on multi-platforms). We'll need to implement a pl/sql which needs to execute an external script.
My understanding is there are only 2 ways to achieve this: (a) use Java stored procedure, (b) use C/C++ library
Question 1: Is Java Stored Proc available in 8.0.6?
Question 2: Is there anywhere I can download Oracle 8.0.6 (Windows, or Tru64, Linux)?
- Willjava in the database was introduced from Oracle8i onwards. this version of Oracle does not support java virtual machine in the database.
You would need to use C/C++ external procedures. -
hello.
What would trigger the change of "STATUS" from valid to invalid
for a java stored procedure (status of the PROCEDURE, not the
java class/source)?
E.g.
- loaded a java source/class
- published it with CREATE PROCEDURE ...
- the procedure inserts a row into some table X
- select* from user_objects where object_type = 'PROCEDURE'; shows that
the proc is valid
- call the proc, fine
- delete a column from the table X
- select* from user_objects where object_type = 'PROCEDURE'; shows that
the proc is still VALID
- call the proc, the call actually completed without error! (but the new row didn't get inserted into the table)
When the schema of a table that a java stored proc refers
to changes, will the java stored proc automatically marked
as "INVALID"? If not, when will this status changed from
VALID to INVALID?
Thanks.
MinMin:
A java stored procedure is marked as VALID or INVALID depending on whether Oracle had any problems loading the class file into the database. Since you had no problems loading the class file it will always be valid.
Now, after you deleted the column in the table I would assume that the java stored procedure would have a problem when it tried to do an insert and it would throw an exception. Your java stored procedure is VALID, it just isn't executing properly and is more than likely throwing an exception.
Sometimes an exception thrown from a jsp is written to a log file instead of to the console. I suspect that this is the case in your situation. You think that the call to the jsp executed with no errors, but I bet it didn't. You will probably find the errors somewhere in the oracle\ora90\admin\mydatabase directory. Look at the latest .trc file. (Note: the path I gave to the .trc files may be different depending on what version of oracle you are using). -
Java stored proc from proxy Java classes generated from a web service?
Hi gurus,
I have searched "Java Stored Procedure" on this forum but could not find what I am looking for, so I have to post again.
I need to use a web service and my client app is written in PowerBuilder 11 (Sybase), which claims that it will create a datawindow from a web service. Well, it turned out that PB can only handle simple stuff (it works with a very simple wsdl from the internet) but can't handle more complex ones that we need to use. So I am thinking about using Oracle JDeveloper(JDev) to create the web service proxy for the web service and then load it into Oracle as a Java stored procedure so that PowerBuilder can call the procedure. JDev succsfully generated the proxy and a few Java classes. My question is, do I need to load all the classes into the database? If yes, will the reference to the package work? For example, in a JDev generated class (the soap client class), it has package MyJdev.proxy; at the top. Or, will it work if I load all the classes included in package /MyJdev/proxy into the database?
Thank you very much for any help.
BenFor the java stored proc called from pl/sql, the example above that uses dynamic sql should word :
CREATE OR REPLACE PACKAGE MyPackage AS
TYPE Ref_Cursor_t IS REF CURSOR;
FUNCTION get_good_ids RETURN VARCHAR2 ;
FUNCTION get_plsql_table_A RETURN Ref_Cursor_t;
END MyPackage;
CREATE OR REPLACE PACKAGE BODY MyPackage AS
FUNCTION get_good_ids RETURN VARCHAR2
AS LANGUAGE JAVA
NAME 'MyServer.getGoodIds() return java.lang.String';
FUNCTION get_plsql_table_A RETURN Ref_Cursor_t
IS table_cursor Ref_Cursor_t;
good_ids VARCHAR2(100);
BEGIN
good_ids := get_good_ids();
OPEN table_cursor FOR 'SELECT id, name FROM TableA WHERE id IN ( ' | | good_ids | | ')';
RETURN table_cursor;
END;
END MyPackage;
public class MyServer{
public static String getGoodIds() throws SQLException {
return "1, 3, 6 ";
null -
How to publish a Java Stored proc....
Hi,
I wrote the following Java code and loaded it into Oracle 8i, as Java stored procs.
public class EmployeeStruct
public int EmployeeNum;
public String EmployeeName;
public String Designation;
and
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
public class InsertData
public static InsertEmployee(EmployeeStruct eps) throws SQLException
Connection conn =
DriverManager.getConnection("jdbc:default:connection:");
String sql = "INSERT INTO EMPLOYEE_TABLE VALUES (?, ?, ?)";
try
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, eps.EmployeeNum);
pstmt.setString(2, eps.EmployeeName);
pstmt.setString(3, eps.Designation);
pstmt.executeUpdate();
pstmt.close();
catch (SQLException e)
System.out.println(e.getMessage());
My question is how do I publish the InsertData proc. I tried :
CREATE OR REPLACE PROCEDURE insert_data (e EMPLOYEESTRUCT) AS LANGUAGE JAVA
NAME 'INSERTDATA(EmployeeStruct)';
but this gives me PLS-00201, identifier EmployeeStruct must be declared.
COULD SOMEONE HELP ME/ SHOW ME HOW ?
I wish to call the java stored proc from an external java program.
rgds
Jeevan S
nullYou can't pass Java classes to Java Stored Procedures via the PL/SQL wrapper. You'll have to write your wrapper to take the int as a NUMBER and the two Strings separately as VARCHAR2s, e.g.:
CREATE OR REPLACE PROCEDURE insert_data
EmployeeNum IN NUMBER,
EmployeeName IN VARCHAR2,
Designation IN VARCHAR2
AS LANGUAGE JAVA
NAME 'InsertData.InsertEmployee(int, java.lang.String, java.lang.String)';
John H.
null -
Creating a java stored proc in jdev
Does anyone have a quick ref guide to creating a java stored proc in jdev? I am missing early steps to correctly setup the project.
Thanks in advance.Assuming you are using ADF BC, you can try something like the following on your Application Module:
/* our java method to call a stored procedure to send email */
public void sendEmail(String fromEmailAddress, String toEmailAddress,
String subject, String body1, String body2,
String body3, String body4, String body5) {
Object[] parms =
{ fromEmailAddress, toEmailAddress, subject, body1, body2, body3,
body4, body5 };
callStoredProcedure("MSKCC.proc_send_mail(?,?,?,?,?,?,?,?)", parms);
protected void callStoredProcedure(String stmt, Object[] bindVars) {
PreparedStatement st = null;
try {
// 1. Create a JDBC PreparedStatement for
st =
getDBTransaction().createPreparedStatement("begin " + stmt + ";end;", 0);
if (bindVars != null) {
// 2. Loop over values for the bind variables passed in, if any
for (int z = 0; z < bindVars.length; z++) {
// 3. Set the value of each bind variable in the statement
st.setObject(z + 1, bindVars[z]);
// 4. Execute the statement
st.executeUpdate();
} catch (SQLException e) {
throw new JboException(e);
} finally {
if (st != null) {
try {
// 5. Close the statement
st.close();
} catch (SQLException e) {
}
Maybe you are looking for
-
How can I see the last location of a now dead ipod touch 4G that had find my iphone turned on?
How can I see the last location of a now dead ipod touch 4G that had find my iphone turned on? I can see my macbook but I cant see the last location of my ipod touch. I lost it a few weeks ago and figured it would show up. But it has not and I need i
-
How can we handle errorrecords in session and calltransaction methods
hi experts can u help me for this
-
Movie DVDs not being recognized
Hello, forum folks. I'm posting about a problem with my family's eMac. It has a combo drive and the CD reading and burning is working just fine. However, it will -not- read DVDs. The family's been trying to watch purchased DVDs, but the computer just
-
Guest WLC not talking to ISE it is in a DMZ
I have allowed all IP to the ISE servers from the DMZ the Guest 5508 WLC sits. I see requests coming in from a WLAN configured on the inside WLC but nothing from the SSID that comes from the WLC within the DMZ it is a mobility anchor for the guest ne
-
Plug ins will not download -even they say they have
I download the adobe most recent versions and they appear to download -but on all websites it will not show my picture/slideshows