Inserting oracle objects / collection using JDBC
Hi people,
I want to insert objects with collections(nested tables) into oracle database using my java JDBC. I believe there are two ways, one using strong types and the other as weak. I am using the weak types.
This is what I have got so far:
create or replace type town_ty as object(
name varchar2(20)
create or replace type country as object (
name varchar2(20),
towns town_ty
create table country_tab of country_ty;
Can any one kindly give or show me an example how to insert data into the above table using weak typed JDBC?
Thanks very much
Hi
You should find what you are looking for in the samples provided here http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/files/advanced/advanced.html.
HTH
Chris
Similar Messages
-
Managing statistics for object collections used as table types in SQL
Hi All,
Is there a way to manage statistics for collections used as table types in SQL.
Below is my test case
Oracle Version :
SQL> select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
SQL> Original Query :
SELECT
9999,
tbl_typ.FILE_ID,
tf.FILE_NM ,
tf.MIME_TYPE ,
dbms_lob.getlength(tfd.FILE_DATA)
FROM
TG_FILE tf,
TG_FILE_DATA tfd,
SELECT
FROM
TABLE
SELECT
CAST(TABLE_ESC_ATTACH(OBJ_ESC_ATTACH( 9999, 99991, 'file1.png', NULL, NULL, NULL),
OBJ_ESC_ATTACH( 9999, 99992, 'file2.png', NULL, NULL, NULL)) AS TABLE_ESC_ATTACH)
FROM
dual
) tbl_typ
WHERE
tf.FILE_ID = tfd.FILE_ID
AND tf.FILE_ID = tbl_typ.FILE_ID
AND tfd.FILE_ID = tbl_typ.FILE_ID;
Elapsed: 00:00:02.90
Execution Plan
Plan hash value: 3970072279
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 194 | 4567 (2)| 00:00:55 |
|* 1 | HASH JOIN | | 1 | 194 | 4567 (2)| 00:00:55 |
|* 2 | HASH JOIN | | 8168 | 287K| 695 (3)| 00:00:09 |
| 3 | VIEW | | 8168 | 103K| 29 (0)| 00:00:01 |
| 4 | COLLECTION ITERATOR CONSTRUCTOR FETCH| | 8168 | 16336 | 29 (0)| 00:00:01 |
| 5 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 6 | TABLE ACCESS FULL | TG_FILE | 565K| 12M| 659 (2)| 00:00:08 |
| 7 | TABLE ACCESS FULL | TG_FILE_DATA | 852K| 128M| 3863 (1)| 00:00:47 |
Predicate Information (identified by operation id):
1 - access("TF"."FILE_ID"="TFD"."FILE_ID" AND "TFD"."FILE_ID"="TBL_TYP"."FILE_ID")
2 - access("TF"."FILE_ID"="TBL_TYP"."FILE_ID")
Statistics
7 recursive calls
0 db block gets
16783 consistent gets
16779 physical reads
0 redo size
916 bytes sent via SQL*Net to client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed Indexes are present in both the tables ( TG_FILE, TG_FILE_DATA ) on column FILE_ID.
select
index_name,blevel,leaf_blocks,DISTINCT_KEYS,clustering_factor,num_rows,sample_size
from
all_indexes
where table_name in ('TG_FILE','TG_FILE_DATA');
INDEX_NAME BLEVEL LEAF_BLOCKS DISTINCT_KEYS CLUSTERING_FACTOR NUM_ROWS SAMPLE_SIZE
TG_FILE_PK 2 2160 552842 21401 552842 285428
TG_FILE_DATA_PK 2 3544 852297 61437 852297 852297 Ideally the view should have used NESTED LOOP, to use the indexes since the no. of rows coming from object collection is only 2.
But it is taking default as 8168, leading to HASH join between the tables..leading to FULL TABLE access.
So my question is, is there any way by which I can change the statistics while using collections in SQL ?
I can use hints to use indexes but planning to avoid it as of now. Currently the time shown in explain plan is not accurate
Modified query with hints :
SELECT
/*+ index(tf TG_FILE_PK ) index(tfd TG_FILE_DATA_PK) */
9999,
tbl_typ.FILE_ID,
tf.FILE_NM ,
tf.MIME_TYPE ,
dbms_lob.getlength(tfd.FILE_DATA)
FROM
TG_FILE tf,
TG_FILE_DATA tfd,
SELECT
FROM
TABLE
SELECT
CAST(TABLE_ESC_ATTACH(OBJ_ESC_ATTACH( 9999, 99991, 'file1.png', NULL, NULL, NULL),
OBJ_ESC_ATTACH( 9999, 99992, 'file2.png', NULL, NULL, NULL)) AS TABLE_ESC_ATTACH)
FROM
dual
tbl_typ
WHERE
tf.FILE_ID = tfd.FILE_ID
AND tf.FILE_ID = tbl_typ.FILE_ID
AND tfd.FILE_ID = tbl_typ.FILE_ID;
Elapsed: 00:00:00.01
Execution Plan
Plan hash value: 1670128954
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 1 | 194 | 29978 (1)| 00:06:00 |
| 1 | NESTED LOOPS | | | | | |
| 2 | NESTED LOOPS | | 1 | 194 | 29978 (1)| 00:06:00 |
| 3 | NESTED LOOPS | | 8168 | 1363K| 16379 (1)| 00:03:17 |
| 4 | VIEW | | 8168 | 103K| 29 (0)| 00:00:01 |
| 5 | COLLECTION ITERATOR CONSTRUCTOR FETCH| | 8168 | 16336 | 29 (0)| 00:00:01 |
| 6 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
| 7 | TABLE ACCESS BY INDEX ROWID | TG_FILE_DATA | 1 | 158 | 2 (0)| 00:00:01 |
|* 8 | INDEX UNIQUE SCAN | TG_FILE_DATA_PK | 1 | | 1 (0)| 00:00:01 |
|* 9 | INDEX UNIQUE SCAN | TG_FILE_PK | 1 | | 1 (0)| 00:00:01 |
| 10 | TABLE ACCESS BY INDEX ROWID | TG_FILE | 1 | 23 | 2 (0)| 00:00:01 |
Predicate Information (identified by operation id):
8 - access("TFD"."FILE_ID"="TBL_TYP"."FILE_ID")
9 - access("TF"."FILE_ID"="TBL_TYP"."FILE_ID")
filter("TF"."FILE_ID"="TFD"."FILE_ID")
Statistics
0 recursive calls
0 db block gets
16 consistent gets
8 physical reads
0 redo size
916 bytes sent via SQL*Net to client
524 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
2 rows processed
Thanks,
BThanks Tubby,
While searching I had found out that we can use CARDINALITY hint to set statistics for TABLE funtion.
But I preferred not to say, as it is currently undocumented hint. I now think I should have mentioned it while posting for the first time
http://www.oracle-developer.net/display.php?id=427
If we go across the document, it has mentioned in total 3 hints to set statistics :
1) CARDINALITY (Undocumented)
2) OPT_ESTIMATE ( Undocumented )
3) DYNAMIC_SAMPLING ( Documented )
4) Extensible Optimiser
Tried it out with different hints and it is working as expected.
i.e. cardinality and opt_estimate are taking the default set value
But using dynamic_sampling hint provides the most correct estimate of the rows ( which is 2 in this particular case )
With CARDINALITY hint
SELECT
/*+ cardinality( e, 5) */*
FROM
TABLE
SELECT
CAST(TABLE_ESC_ATTACH(OBJ_ESC_ATTACH( 9999, 99991, 'file1.png', NULL, NULL, NULL),
OBJ_ESC_ATTACH( 9999, 99992, 'file2.png', NULL, NULL, NULL)) AS TABLE_ESC_ATTACH)
FROM
dual
) e ;
Elapsed: 00:00:00.00
Execution Plan
Plan hash value: 1467416936
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 5 | 10 | 29 (0)| 00:00:01 |
| 1 | COLLECTION ITERATOR CONSTRUCTOR FETCH| | 5 | 10 | 29 (0)| 00:00:01 |
| 2 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
With OPT_ESTIMATE hint
SELECT
/*+ opt_estimate(table, e, scale_rows=0.0006) */*
FROM
TABLE
SELECT
CAST(TABLE_ESC_ATTACH(OBJ_ESC_ATTACH( 9999, 99991, 'file1.png', NULL, NULL, NULL),
OBJ_ESC_ATTACH( 9999, 99992, 'file2.png', NULL, NULL, NULL)) AS TABLE_ESC_ATTACH)
FROM
dual
) e ;
Execution Plan
Plan hash value: 4043204977
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 5 | 485 | 29 (0)| 00:00:01 |
| 1 | VIEW | | 5 | 485 | 29 (0)| 00:00:01 |
| 2 | COLLECTION ITERATOR CONSTRUCTOR FETCH| | 5 | 10 | 29 (0)| 00:00:01 |
| 3 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
With DYNAMIC_SAMPLING hint
SELECT
/*+ dynamic_sampling( e, 5) */*
FROM
TABLE
SELECT
CAST(TABLE_ESC_ATTACH(OBJ_ESC_ATTACH( 9999, 99991, 'file1.png', NULL, NULL, NULL),
OBJ_ESC_ATTACH( 9999, 99992, 'file2.png', NULL, NULL, NULL)) AS TABLE_ESC_ATTACH)
FROM
dual
) e ;
Elapsed: 00:00:00.00
Execution Plan
Plan hash value: 1467416936
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
| 0 | SELECT STATEMENT | | 2 | 4 | 11 (0)| 00:00:01 |
| 1 | COLLECTION ITERATOR CONSTRUCTOR FETCH| | 2 | 4 | 11 (0)| 00:00:01 |
| 2 | FAST DUAL | | 1 | | 2 (0)| 00:00:01 |
Note
- dynamic sampling used for this statement (level=2)I will be testing the last option "Extensible Optimizer" and put my findings here .
I hope oracle in future releases, improve the statistics gathering for collections which can be used in DML and not just use the default block size.
By the way, are you aware why it uses the default block size ? Is it because it is the smallest granular unit which oracle provides ?
Regards,
B -
Passing XMLType Data into oracle stored procedure using JDBC
Hi Friends,
I have requirement where my oracle stored procedure accepts XML file as an input. This XML File is generated in runtime using java, I need to pass that xml file using JDBC to oracle stored procedure. Please let me know the fesibile solution for this problem.
Following are the environment details
JDK Version: 1.6
Oracle: 10g
Server: Tomcat 6.x
Thanks in Advanceuser4898687 wrote:
I have requirement where my oracle stored procedure accepts XML file as an input. This XML File is generated in runtime using java, I need to pass that xml file using JDBC to oracle stored procedure. Please let me know the fesibile solution for this problem.As stated - no.
A 'file' is a file system entity. There is no way to pass a 'file' anywhere. Not PL/SQL. Not java.
Now you can pass a file path (a string) in java and to PL/SQL.
Or you can pass xml data (a string) in java and to PL/SQL. For PL/SQL you could use eithe a varchar2, if the xml is rather small, or a blob/clob. -
Can't execute Oracle Stored Procedure using JDBC
Hi all,
I'm fairly new to JDBC and Oracle, so pardon my ignorance/lack of knowledge in this subject matter. I am trying to call a stored procedure named get_countries that has no parameters using JDBC. I do this by executing the following lines of code:
CallableStatement cs = con.prepareCall("{call get_countries}");
ResultSet rs = cs.executeQuery();But I get the following exception thrown:
Exception in thread "main" java.sql.SQLException: ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'GET_COUNTRIES'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
at oracle.jdbc.driver.DatabaseError.throwSqlException(_DatabaseError.java:112_)
at oracle.jdbc.driver.T4CTTIoer.processError(_T4CTTIoer.java:331_)
at oracle.jdbc.driver.T4CTTIoer.processError(_T4CTTIoer.java:288_)
at oracle.jdbc.driver.T4C8Oall.receive(_T4C8Oall.java:745_)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(_T4CCallableStatement.java:218_)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(_T4CCallableStatement.java:969_)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(_OracleStatement.java:1190_)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(_OraclePreparedStatement.java:3370_)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(_OraclePreparedStatement.java:3415_)
at JDBCTest.main(_JDBCTest.java:44_)
This makes no sense to me because there are no parameters that I need to pass. So I'm guessing this is something that I don't know about JDBC or about Oracle. I've searched Google for the past hour and a half and still haven't found anything that explains what might be the problem. I've also been following this guide ([http://java.sun.com/docs/books/tutorial/jdbc/basics/sql.html]) and I'm doing it exactly the same way, but for some reason it works for them.
Anyone know what I'm doing wrong?
Thanks for your help in advance. I really appreciate it!I went to a few forums and asked the same question. The boys down at Oracle Community Forums shed some light on this subject and, with their help, I was able to figure it out. Here is the thread for those who want to read: [My Thread @ Oracle Community Forums|http://forums.oracle.com/forums/thread.jspa?messageID=2721348?].
THE SOLUTION
cs = con.prepareCall("{ call get_countries(?) }");
cs.registerOutParameter(1, OracleTypes.CURSOR);
cs.execute();
ResultSet rs = ((OracleCallableStatement) cs).getCursor(1); -
Problem inserting the euro sign using JDBC
Inserting the euro sign into a char field of a DB2 table using JDBC results in getting a control char (SUBSTITUTE / ASCII 26) in the field, instead of the expected euro sign.
I tried both the "old" DB2 driver (db2driver.zip) and the new one (db2jcc.jar). I get the same result in both cases. I also thought this might be a problem of different character sets between the client machine and the database server, but the problem doesn't occur if i use non java third party tools (like WinSQL) to insert the euro sign...
Any idea?
ColargolSomething like below will verify that you can send the character to the database, store it, and return it with java. You need to run this in a Unicode compliant tool, like Eclipse 3.0.
//Euro character in Unicode is below, insert it into DB.
int myCharacterInteger = 0x20AC;
String myChar = new String(new char[]{(char) myCharacterInteger});
System.out.println("My character inbound is " + myChar);
pstmt.setString(1, myChar);
pstmt.execute();
pstmt.close();
//Euro character in Unicode is below, insert it into DB.
PreparedStatement pstmt2 = dbc
.prepareStatement("select * from tmp_junk");
ResultSet rs = pstmt2.executeQuery();
while (rs.next())
System.out
.println("My character from DB is " + rs.getString(1));If that returns the character properly from DB, examine how the character is being input into java, you may inadvertently be changing character sets there.
PS - that may not be right character, but you get the idea. We don't use Euros much where I work. ;-)
-Scott
http://www.swiftradius.com -
Oracle Heterogenous Services using JDBC (not using ODBC)
Dear Friends,
I need to configure Oracle HS to connect with MS SQL Server using JDBC as our company don't want to go for ODBC connection.
Operating System is HP-UX
Oracle Database Version is
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi
PL/SQL Release 10.2.0.3.0 - Production
CORE 10.2.0.3.0 Production
TNS for HPUX: Version 10.2.0.3.0 - Production
NLSRTL Version 10.2.0.3.0 - Production
Can anyone please help me.The options you have for Heterogeneous Services are ODBC and OleDB.
JDBC is not an option.
The only other option is Transparant Gateway, a separately licenseable product.
I don't know whether Transparant Gateway relies on other drivers.
From the Sqlserver end there is MSDTC.
Oracle generally doesn't underdocument their products.
You can safely assume if it isn't documented, it isn't there.
Sybrand Bakker
Senior Oracle DBA -
Memory Leak when TOMCAT connects to Oracle 10g RAC using JDBC Thin driver.
We had experienced Memory leak when a Oracle 10g (10.2.0.3) RAC node was evicted. TOMCAT app server is connecting to the Oracle 10g RAC database instances using JDBC 10.2.0.3 thin driver.
Anyone had similar experience?
Any ideas? Any bugs reported/fixed?
Thanks,
RajIf you're doing XA, we absolutely do not support
driver-level load-balancing OR failover. Use neither.
For non-XA, you can use driver-level failover. For
non-XA, you could set load-balancing, but it won't
help because we get connections from the driver,
and keep them indefinitely, so the driver never gets
the chance to affect which connections the pool
uses after that. -
Adding to a Collection using JDBC
I'm trying to add to a Collection via JDBC but have had no luck with getting the ResultSet into the Collection and would be grateful for some pointers in the right direction in the while (rs.next()) block:
public void getMembers(BwGroup group) throws CalFacadeException {
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/loginlist";
Connection conn = null;
Collection<BwPrincipal> ms = new TreeSet<BwPrincipal>();
try {
conn = DriverManager.getConnection(url, "user", "pword");
PreparedStatement ps = conn.prepareStatement("SELECT * FROM list WHERE list='" + group +"'");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
BwPrincipal = new bp(rs.getString(1));
ms = addAll(bp);
group.setGroupMembers(ms);
rs.close();
ps.close();
} catch (Exception e){
e.printStackTrace();
} finally {
if (conn != null) {
conn.close();
}I'm getting errors regarding incompatible types for the BwPrincipal line and addAll being an unfound symbol (though I had thought that it was a method to add to Collections). If I try to call BwPrincipal as BwPrincipal bp = new bp(rs.getString(1)); then the addAll error disappears but the programme cannot see BwPrincipal as a class. I feel as if I'm going around in circles at the moment.BaroqueThoughts wrote:
As you say, I'm trying to call something along the lines of
ms= rs.getString(1);but get an incompatible string back. The reading that I had done suggested addAll but I've probably misunderstood in trying to get this to work. If I try
ms.add(rs)then the compiler doesn't like the add method (add cannot be applied to java.sql.ResultSet)Well it can't. Why did you try that, though? To be honest, if you can't figure this out yet, JDBC is probably a step too far at the moment. Re-visit the basics, because you clearly don't understand them yet, and you'll struggle forever if you carry on down this path as-is -
How can I insert a value into the Oracle Date column using JDBC?
Suppose I have a table TEST created by "create table TEST (c1 INT, c2 Date);"
Now I want to insert some proper value into the table TEST's column c2. I couldn't do that by TRYing using Java.sql.Date, Java.Util.Date, Java.String.
Could anyone give me some suggestions by providing the sample code?
Many thanks for your help!
WendyWhat about building the java string:
"Insert into test (c1,d1) values ("+
Integer.toString(var)+
", TO_DATE("
formatYourDateVariableWithCalendarMethods
",'DD-MON-YYYY')"
and executing it ?? -
How to call BULK COLLECT using JDBC in JSP?
Hi
I am using BULK COLLECT instead of CURSOR in my Stored Procedure.
How to use these stuff in JDBC.
If i am using CURSOR means
cs.registerOutParameter(1,oracle.jdbc.driver.OracleTypes.CURSOR);
is used.
Which types i have to use?
I am retriving morethan one record using FOR. LOOP in SP and before that
BULK COLLECT is used in SELECT query..
Can you give jsp code for this?
Thanksyou may find related sample jdbc code on otn - http://www.oracle.com/technology/sample_code/tech/java/sqlj_jdbc/index.html
Best regards. -
Passing Object types using JDBC
I need to pass Oracle user-defined object types in and out of
PL/SQL stored procedures. Is this possible???
Thanks
nullHi Tina,
I just had another thought. JDBC for 8.0 doesn't support
user-defined SQL types. This feature isn't implemented until 8i.
Sorry about the false lead!
So you'd have to wrapper your object in another PL/SQL method
which 'explodes' the user-defined type, as:
procedure can_call_from_jdbc (ename varchar2, empno number, ...)
is...
begin
call my_procedure(employee_t(ename, empno, ...));
end;
Pierre
Oracle Product Development Team wrote:
: Hi Tina,
: Yikes! I'm glad you asked; it made me realize that some info
: that's supposed to be posted on our external site is missing.
I
: think it'll take about a week to push this to our external
site.
: I'll try to find you a version and email it to you directly.
: Thanks!
: Pierre
: Tina Creighton (guest) wrote:
: : I'm currently using version 8.04 with Objects option, I'm
: trying
: : to locate the oracle.jpub class. Is there a way to download
: the
: : new jdbc that works with objects. Thanks. Tina
: : Oracle Product Development Team wrote:
: : : Absolutely!
: : : the easiest thing is first to use JPub to generate a Java
: : object
: : : which is an analogue to the SQL object you have. For
: example,
: : : if your SQL object is called 'EMPLOYEE_T', you can invoke
: JPub
: : : with:
: : : $ jpub -sql=employee_t -url=jdbc:oracle:oci8:@
: : -user=scott/tiger
: : : or even
: : : $ java oracle.jpub.Main -sql=employee_t
: -url=jdbc:oracle:oci8:@
: : : -user=scott/tiger
: : : This'll give you a Java class used to represent Java
: instances
: : of
: : : the SQL 'employee_t', featuring friendly setters and getter
: for
: : : the fields.
: : : If you have PL/SQL programs which take arguments of type
: : : employee_t, such as:
: : : PROCEDURE P1 (N NUMBER, E EMPLOYEE_T) IS...
: : : PROCEDURE P2 (N NUMBER, E OUT EMPLOYEE_T) IS...
: : : PROCEDURE P3 (N NUMBER, E IN OUT EMPLOYEE_T) IS...
: : : You can call them in a SQLJ program as:
: : : main () {
: : : employee_t e; // the class generated by JPub
: : : #sql {call P1(1, :e);}
: : : #sql {call P2(2, :out e);}
: : : #sql {call P3(3, :in out e);}
: : : to call your three PL/SQL procedures. After the call to P2
: and
: : : P3, your
: : : variable 'e' will be populated with the contents of the new
: : : employee_t value
: : : that was output from the PL/SQL method.
: : : (SQLJ is just a shorthand way of calling JDBC. SQLJ
programs
: : are
: : : translated
: : : into SQLJ programs by calling the "SQLJ Translator":
: : : $ sqlj myfile.sqlj
: : : Pierre
: : : Tina creighton (guest) wrote:
: : : : I need to pass Oracle user-defined object types in and
out
: of
: : : : PL/SQL stored procedures. Is this possible???
: : : : Thanks
: : : Oracle Technology Network
: : : http://technet.oracle.com
: Oracle Technology Network
: http://technet.oracle.com
Oracle Technology Network
http://technet.oracle.com
null -
Accessing ORACLE's VARRAY using JDBC
Hi,
I have a created a VARRAY type like following in ORACLE:
CREATE OR REPLACE
TYPE opr_typ_attrib_val_arr AS TABLE OF VARCHAR2 (255)
I am trying to access this VARRAY using the following java code:
ArrayDescriptor arrayDesc = ArrayDescriptor.createDescriptor("opr_typ_attrib_val_arr ", (OracleConnection)connection);
String arrayValues[] = {"123", "234"};
ARRAY array = new ARRAY(arrayDesc, connection, arrayValues);
But in the very first statement, where I am getting the object of ArrayDescriptor, I am getting the java.lang.ClassCastException exception.
I am using oracle type 4 thin driver. And the above mentioned code I have written in EJB.
"connection" is a valid connection object.
Could anybody help me out to resolve this issue.
Thanks in advance.
AmitHi,
With a snap shot of your code it would hv been more easier to pinpoint your problem.
However this is how I am doing it:
(the thin driver, classes12.zip must be in the classpath)
--In the Oracle PL/SLQ proc:
type REC_TYPE is ref cursor;
FUNCTION spFindBid(
p_ORDCreateSeq in number,
p_RAT in number,
p_prdID in number,
p_ACCTID in number,
p_LAMT in number) return REC_TYPE
IS
rc REC_TYPE;
begin
open rc for
SELECT * from table_name
return rc;
// in the Java code:
import oracle.jdbc.driver.*;
//besides other imports.
CallableStatement cs
= cn.prepareCall("{? =....}");
cs.registerOutParameter(1,
OracleTypes.CURSOR);
cs.setString(1, "XXXX");
cs.execute();
java.sql.ResultSet rs =
(java.sql.ResultSet)cs.getObject(1);
//this will return a standard resultSet,
//as what is recvd when we execute a
//SELECT via standard, CreateStatement()....
//loop on it while(rs.next()) to get
//the dataI am using the 100% Java thin driver.
I could not figure how to use an OCI 8 driver
with a Standalone Java program (not weblogic). Could not find a driver as a(.zip/.jar) file. OCI8 has more easier ways of accessing OracleDB.
rgds
Jeevan S
null -
How to Insert all Records together using JDBC Receiver Adapter.
Hi,
Suppose, I have to send 5 records and from R/3
(using client Proxy) using XI and insert/update all these records in a database.
In case I want to update all the 5 records else mark it as fail and return the response synchronously to R/3, what should be my approach?
Can we do it using native sql querries, if yes could you plese tell me how to do so.
I have never used native sql queries.
Thanks in advance.
Regards
Pushkarhi,
>>>>Can we do it using native sql querries, if yes could you plese tell me how to do so.
why don't use use standard jdbc adapter and standard jdbc document formats?
the sync jdbc call will return the number of affected /deleted rows
Regards,
michal -
Inserting into two tables using JDBC Receiver Adapter
I've defined following type for Receiver JDBC to save data in two different tables
Name Category Type Occurrence
ReceiverDB_DT Complex Type
STATEMENT Element 1..unbounded
TABLE_NAME Element 1
ACTION Attribute xsd:string required
TABLE Element xsd:string 1
ACCESS Element Table1_DT 1
STATEMENT2 Element 1..unbounded
TABLE_NAME Element 1
ACTION Attribute xsd:string required
TABLE Element xsd:string 1
ACCESS Element Table2_DT 1
When I send data of two tables, it is showing data for both the two tables in MONI of PI System, but ultimately it shows only one table's data in message monitoring payload.
what could be the problem?
Thanks,
-HareshIt solved!!!
by just changing Occurrence only as rightly pointed by Ankesh
Name Category Type Occurrence
ReceiverDB_DT Complex Type
STATEMENT Element 1..unbounded
TABLE_NAME Element 1
ACTION Attribute xsd:string required
TABLE Element xsd:string 1
ACCESS Element Table1_DT 1
STATEMENT2 Element 1..unbounded
TABLE_NAME Element 1
ACTION Attribute xsd:string required
TABLE Element xsd:string 1
ACCESS Element Table2_DT 1
Name Category Type Occurrence
ReceiverDB_DT Complex Type
STATEMENT Element 1
TABLE_NAME Element 1
ACTION Attribute xsd:string required
TABLE Element xsd:string 1
ACCESS Element Table1_DT 1..unbounded
STATEMENT2 Element 1
TABLE_NAME Element 1
ACTION Attribute xsd:string required
TABLE Element xsd:string 1
ACCESS Element Table2_DT 1..unbounded
Thanks a lot ankesh -
Empty CLOB field value from Oracle database using JDBC Sender
Hi All,
I am selecting a CLOB field from Oracle database table using JDBC Sender adapter and getting error "NullPointerException"
Seen SAP note 1283089 but its not applicable for my support pack PI 7.0 SP 12 and client dont want to upgrdate SP 17 right now.
I tried rpad(1,0)Column_Name funciton in JDBC select query but it selcting blank value for every record even those having some value for this CLOB field so not useful
Could anybody suggest possible way? client dont want to change anything at database side.
Thanks,
DharamveerWhat is the Oracle driver version installed? You might need to install 10.x driver if not already using it.
Maybe you are looking for
-
Hi, I have a requirement using ADOBE interactive forms: I have project to do where, I need to create an Adobe interactive form. User should be able to enter data to the form and with a click of a button on Adobe or on save data should available back
-
Windows Update and MI424-WR Router
I have seen this happen a few times where if I am updating large files through Windows Update, the MI424-WR Router seems to lose its DNS info and I lose the internet connection. I can still communicate between computers in the house. That is why I
-
Create a dictionary managed tablespace error.
When I use the following script to create a tablespace. create tablespace DATA01 datafile 'c:\oracle\oradata\orawin2k\U04\data01.dbf' size 2M EXTENT MANAGEMENT DICTIONARY; But the oracle return this error. ORA-12913: Cannot create dictionary managed
-
The sound effects icon has come up in the middle of my iPad and I can't turn it off
Trying to eliminate the big sound effects icon in the middle of my ipad
-
Relation among tables...!!!urgent
Hi all, I just want to know how to relate a too many tables like 200+ in an organisation for an application database , its difficult for me too trace every constraint,column or how it related eachother to know pls help me convey any ideas to me .....