User Defined Types menuitem not appears in Server Explorer at Remote Server
Hi,
I'm working on oracle 10g,odp.net with 2.0. i created two types which are input and output parameters for a function. I installed odp.net (ORACLE DATA PROVIDER FOR .NET 11.1.0.6.20) and generated UDT custom class code. It's working in my system. But when i installed odp.net (ORACLE DATA PROVIDER FOR .NET 11.1.0.6.20) in my remote server, its not showing the UDT Custom Class Code Generation Wizard to create UDT Custom Class Code. I have installed oracle Client 10g,.Net Framework 2.0 and ODP.Net(11.1.0.6.20) in the server.
In my Local system server explorer it's showing
Tables
Views
Procedures
Functions
Packages
Synonyms
Sequences
XML Databases
Java Classes
User-Defined Types
In server explorer it's showing only
Tables
Views
Synonyms
Sequences
Procedures
Functions
Packages
Package Bodies
Why its not showing User-Defined Types.
Pls Help.
Ideas are highly appreciated.
Anil
As you noticed, not all database objects are available in Server Explorer, and because of this they can't have scripts generated for them, nor can they be compared with Schema Compare.
In a pinch, you should be able to use SQL Developer to do this.
Similar Messages
-
User-Defined Type does not display values in Table Data grid
I have a User defined Type that is a collection of one character VARCHAR2 values. In the Table Data grid it does not display the character values. I know on all our other Oracle development applications these values display. Is this a bug or is there a snippet to display these values?
Version: 1.0.0.15
DB: 10.2.0
Workstation OS: Windows XP -
JPub Error User-defined type not found
I just have found about Jpub could help me with my problem, so i try it, but when i try to publish a package it gives me this error:
J2T-118, ERROR: User-defined type "ADMCAD.PKG_CONSULTA_BR_NOME.TAB_ELEITOR" was
not found in the database
This is the package:
create or replace package admcad.pkg_consulta_br_nome as
VT_NUM_INSCRICAO VARCHAR2(12);
VT_COD_SIT_ELEITOR NUMBER(2);
VT_NOM_ELEITOR VARCHAR2(70);
VT_DAT_NASC NUMBER(8);
VT_NUM_ZONA NUMBER(4);
VT_SGL_UF VARCHAR2(2);
-- tipo que sera retornado
TYPE REC_TAB_ELEITOR IS RECORD (
NUM_INSCRICAO VT_NUM_INSCRICAO%TYPE,
NOM_ELEITOR VT_NOM_ELEITOR%TYPE,
NOM_PAI VT_NOM_ELEITOR%TYPE,
NOM_MAE VT_NOM_ELEITOR%TYPE,
DAT_NASC VT_DAT_NASC%TYPE,
DAT_DOMIC_MUNIC DATE,
COD_SIT_ELEITOR VT_COD_SIT_ELEITOR%TYPE,
SGL_UF VT_SGL_UF%TYPE,
NUM_ZONA VT_NUM_ZONA%TYPE);
TYPE tab_eleitor IS TABLE OF REC_TAB_ELEITOR INDEX BY BINARY_INTEGER;
TYPE cursor_consulta IS REF CURSOR;
SUBTYPE T_NUM_INSCRICAO is VT_NUM_INSCRICAO%TYPE;
SUBTYPE T_COD_SIT_ELEITOR is VT_COD_SIT_ELEITOR%TYPE;
SUBTYPE T_NOM_ELEITOR is VT_NOM_ELEITOR%TYPE;
SUBTYPE T_NOM_PAI is VT_NOM_ELEITOR%TYPE;
SUBTYPE T_NOM_MAE is VT_NOM_ELEITOR%TYPE;
SUBTYPE T_DAT_DOMIC_MUNIC is date;
SUBTYPE T_DAT_NASC is VT_DAT_NASC%TYPE;
SUBTYPE T_SGL_UF is VT_SGL_UF%TYPE;
SUBTYPE T_NUM_ZONA is VT_NUM_ZONA%TYPE;
TYPE rec_consulta IS RECORD (
num_inscricao T_NUM_INSCRICAO,
cod_sit_eleitor T_COD_SIT_ELEITOR,
nom_eleitor T_NOM_ELEITOR,
nom_pai T_NOM_PAI,
nom_mae T_NOM_MAE,
dat_domic_munic T_DAT_DOMIC_MUNIC,
dat_nasc T_DAT_NASC,
sgl_uf T_SGL_UF,
num_zona T_NUM_ZONA);
procedure prc_consulta ( d01_cod_fon_nome in varchar2,
d01_cod_fon_mae in varchar2,
d01_dat_nasc in number,
d01_qtd_regs out number,
vtab_eleitor in out tab_eleitor);
end pkg_consulta_br_nome;
This is the command line:
jpub -user=XXX/XXX@there -sql=admcad.pkg_consulta_br_nome
Am I wrong, or jpub was suppose to publish any type in the signature?
Please help.
Rafael DittbernerRafael,
I suggest you try asking in the Toplink discussion forum. You can find a link to it from this Web page:
http://www.oracle.com/technology/products/ias/toplink/index.html
Good Luck,
Avi. -
Guys i am using Entity Framework 5 code first (I am not using edmx) with Oracle and all works good, Now i am trying to get data from stored procedure which is under package but stored procedure have out param which is user define type, Now my question is
how i will call stored procedure from entity framework
Thanks in advance.I agree with you, but issue is we have lots of existing store procedure, which we need to call where damn required. I am sure those will be few but still i need to find out.
If you think you are going to get existing MS Stored Procedures or Oracle Packages that had nothing to do with the ORM previously to work that are not geared to do simple CRUD operations with the ORM and the database tables, you have a rude awakening
coming that's for sure. You had better look into using ADO.NET and Oracle Command objects and call those Oracle Packages by those means and use a datareader.
You could use the EF backdoor, call Oracle Command object and use the Packages, if that's even possible, just like you can use MS SQL Server Stored Procedures or in-line T-SQL via the EF backdoor.
That's about your best shot.
http://blogs.msdn.com/b/alexj/archive/2009/11/07/tip-41-how-to-execute-t-sql-directly-against-the-database.aspx -
Confused: Returning Simple User Defined Type (non-built-in)
Hi, hope you can straighten out a confused newbie! This is probably laughingly simple if you know how...
I just want my weblogic workshop web service to return an ordinary record-style object to my static client. I'm not sure what to do, I've already tried a few approaches...
If I use two services deployed on Weblogic Server everything works great. Weblogic server must handle the seriali/deseriali - zation for you.
So I tried to use the java proxy downloaded from the test page, but it doesn't contain all the classes needed.
I read the Weblogic help files which said to use autotype, which compiles but gives class cast exceptions running. I tried both automatic and manual with same error. Trying to import to Workshop gave me a "no handler defined error".
And I bought a book from Amazon about J2EE and Weblogic but it does not include a section on user defined types!
Am I supposed to use XMLBeans or something??? Please help!
Regards, Ry.> but the requirement is not allowing me to do either with ref cursor or with
returning clause. Because, in .Net development area , we are restricted for
using Returning clause.
The following is a Bad Idea (tm) where PL/SQL is used to "return data" to the caller, be that via PL/SQL record types or collection types..Net ---[calls]-------> PL/SQL
PL/SQL ---[calls]-------> SQL
PL/SQL <--[data]--------- SQL
PL/SQL [buffers] data
.Net <--[buffer data]-- PL/SQLWhy?
Because PL/SQL is a poor choice for a buffer as the db cache buffer used by the SQL engine is a very advance and sophisticated cache and core to the Oracle RDBMS.
Ain't no way you can do that better in PL/SQL than SQL.
What is the typical client-server approach in Oracle?.Net ---[calls]-------> PL/SQL
PL/SQL [constructs ref cursor]
.Net <--[ref cursor]-- PL/SQL
.Net --[fetches]----> SQL [using ref cursor]A ref cursor is a pointer the "compiled and executable SQL program" in Oracle that PL/SQL constructed for .Net in this case. Each FETCH call using the ref cursor pointer, executes the cursor "program" and returns the next row (or set of rows when using bulk processing) to the client. -
Hello it would be very nice to be able to use user define types in a diagram, at this time oracle, ibm db2 9 and sql server 2005 suport sql ansi 2003 and to use all this potential we have to take tecnology foward. My sugestion is create object diagram that can help design all this funtionability, rational rose has the oracle8 addin this will give you an exact idea of what i am asking.
Thanks for your atention and let me know if you are planing to do this.
Perhaps this is not the right forum please tell me where I can send this as a future requestsJDeveloper has a UML class diagram with transformation into a Java class diagram - are you looking for anything beyond that?
-
Using columns of user defined types
Can anyone help me display data from a column within a table which is of a user defined type - a object with 4 elements .
Discoverer wont currently display the data - it says a MAP or ORDER method is required.
The type is declared as :
create or replace type m_p as object
( m_p_id number(9),
m_p_start number,
m_p_end number,
m_p_length number )
and the table is declared as
create table t_m_p (
N_ID NUMBER,
N_PL M_P,
N_ATT VARCHAR2(1)
What do I need to do to allow Discoverer 3.1 to display the data held in the N_PL column?
Also : can anyone tell me if it is possible to display data in Discoverer from a thre dimensional varray? - or would I have to create a view on it?Discoverer does not currently allow queries to contain the extended Oracle 8 object types. The way to resolve this is to write views that present a relational view of the object structure and then build a business area based on these views
Oracle Discoverer Team
<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by nikstace ([email protected]):
Can anyone help me display data from a column within a table which is of a user defined type - a object with 4 elements .
Discoverer wont currently display the data - it says a MAP or ORDER method is required.
The type is declared as :
create or replace type m_p as object
( m_p_id number(9),
m_p_start number,
m_p_end number,
m_p_length number )
and the table is declared as
create table t_m_p (
N_ID NUMBER,
N_PL M_P,
N_ATT VARCHAR2(1)
What do I need to do to allow Discoverer 3.1 to display the data held in the N_PL column?
Also : can anyone tell me if it is possible to display data in Discoverer from a thre dimensional varray? - or would I have to create a view on it?<HR></BLOCKQUOTE>
null -
Table OF user defined type in c#
Hello
I am running C# using Oracle (PL/SQL, provider ODP.NET
11.1.0.6.20) and I have a procedure which at the moment returns a table of
records. The code below demonstrates this.
TYPE R_OutData_tab IS RECORD ( ... );
TYPE OutData_tab IS TABLE OF R_OutData_tab INDEX BY BINARY_INTEGER;
PROCEDURE PROPERTY_GET (tOutData OUT <packagename>.OutData_tab);
Since .NET doesn't support Oracle records I'm looking into rewriting the
procedure so that it returns a table of a user defined type instead. The
code below demonstrates this.
create type person_type as object (name varchar2(30), address varchar2(60),
age varchar2(3));
TYPE person_table IS TABLE OF odp_obj1_sample_person_type;
PROCEDURE PERSONS_GET(out_persons OUT person_table);
I know how to handle a single user-defined type in .NET returned from a
Oralce procedure but what I need to do now is to receive a or pass table of a user
defined type using procedure. Is this supported in .NET?Dear ,
I have posted a similar kind of reply in one of the thread which may help u defining the User Defined Tabel /Filed .Just check this Out :
For cm25/CM21 : Assuming that you have all the other set up for Capacity Requirement in place , please note the belwo steps for layout design for CM25 OR cm21 or cm22( all you will be used same overall profile )
1.Make sure that you have proper Overall profile defined in OPD0-Define Overall profile .Here u will define Time Profile , Startegy prfoile . Lay out Profile etc .
2.To paint your layout your soultion is to Goto -CY38-Pop down the menu -Select the Lay out Key which have been used as lay out -Goto Change Mode (Pencil symbol)-Now you will find the fields are high ligheted as per CM25 dipaly in a sequnce -You can un chekcde the Filed like Operation , Operation text , Setup what ever you do not want to show in Order Pool and Hit SAVE butotn and come back .
CM25 --> Settings --> Display Profiles --> Planning tab.profile --> I01 --> Layout ID ( Example : 'SAPSFCLA05') which is Main Capacity Lay out id .
If you goto CY38-Pop down the menu -You will find Main Capcitity Lay out Id : Example SAPSFCAS01 -Enter this lay out and chenage accordingly as I have explained in above
Once you save this , then go back to CM25 and execute with coupe of work centres to check how is the order pool looks now .
Refer this threade for Layout Id and option which u may need for CM25 front end
Exception messages in CM21 or CM25
I hope this should work
Regards -
Access result set in user define type of table
here is the situation. I have a stored procedure that dequeues messages of a AQ and passes them as an OUT parameter in a collection of a user defined type. The same type used to define the queues. The java code executes properly but seems like we don't/can't access the result set. We don't receive any erros but don't know how to access the results. I've included relevant parts of the problem.
I know this should be doable but........Can someone please tell us what we are doing wrong....thanks in advance.
-----create object type
create type evt_ot as object(
table_name varchar(40),
table_data varchar(4000));
---create table of object types.
create type msg_evt_table is table of evt_ot;
----create queue table with object type
begin
DBMS_AQADM.CREATE_QUEUE_TABLE (
Queue_table => 'etlload.aq_qtt_text',
Queue_payload_type => 'etlload.evt_ot');
end;
---create queues.
begin
DBMS_AQADM.CREATE_QUEUE (
Queue_name => 'etlload.aq_text_que',
Queue_table => 'etlload.aq_qtt_text');
end;
Rem
Rem Starting the queues and enable both enqueue and dequeue
Rem
EXECUTE DBMS_AQADM.START_QUEUE (Queue_name => 'etlload.aq_text_que');
----create procedure to dequeue an array and pass it OUT using msg_evt_table ---type collection.
create or replace procedure test_aq_q (
i_array_size in number ,
o_array_size out number ,
text1 out msg_evt_table) is
begin
DECLARE
message_properties_array dbms_aq.message_properties_array_t :=
dbms_aq.message_properties_array_t();
msgid_array dbms_aq.msgid_array_t;
dequeue_options dbms_aq.dequeue_options_t;
message etlload.msg_evt_table;
id pls_integer := 0;
retval pls_integer := 0;
total_retval pls_integer := 0;
ctr number :=0;
havedata boolean :=true;
java_exp exception;
no_messages exception;
pragma EXCEPTION_INIT (java_exp, -24197);
pragma exception_init (no_messages, -25228);
BEGIN
DBMS_OUTPUT.ENABLE (20000);
dequeue_options.wait :=0;
dequeue_options.correlation := 'event' ;
id := i_array_size;
-- Dequeue this message from AQ queue using DBMS_AQ package
begin
retval := dbms_aq.dequeue_array(
queue_name => 'etlload.aq_text_que',
dequeue_options => dequeue_options,
array_size => id,
message_properties_array => message_properties_array,
payload_array => message,
msgid_array => msgid_array);
text1 := message;
o_array_size := retval;
EXCEPTION
WHEN java_exp THEN
dbms_output.put_line('exception information:');
WHEN no_messages THEN
havedata := false;
o_array_size := 0;
end;
end;
END;
----below is the java code....
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Struct;
import oracle.jdbc.driver.OracleCallableStatement;
import oracle.jdbc.driver.OracleTypes;
public class TestOracleArray {
private final String SQL = "{call etlload.test_aq_q(?,?,?)}";//array size, var name for return value, MessageEventTable
private final String driverClass = "oracle.jdbc.driver.OracleDriver";
private final String serverName = "OurServerName";
private final String port = "1500";
private final String sid = "OurSid";
private final String userId = "OurUser";
private final String pwd = "OurPwd";
Connection conn = null;
public static void main(String[] args){
TestOracleArray toa = new TestOracleArray();
try {
toa.go();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
private void go() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
Class.forName(driverClass).newInstance();
String url = "jdbc:oracle:thin:@"+serverName+":"+port+":"+sid;
conn = DriverManager.getConnection(url,userId,pwd);
OracleCallableStatement stmt = (OracleCallableStatement)conn.prepareCall(SQL);
//set 1 input
stmt.setInt(1, 50);
//register out 1
stmt.registerOutParameter(2, OracleTypes.NUMERIC);
//register out 2
stmt.registerOutParameter(3, OracleTypes.ARRAY, "MSG_EVT_TABLE");
* This code returns a non-null ResultSet but there is no data in the ResultSet
* ResultSet rs = stmt.executeQuery();
* rs.close();
* Tried all sorts of combinations of getXXXX(1);
* All return the same error Message: Invalid column index
* So it appears that the execute statment returns no data.
stmt.execute();
Struct myObject = (Struct)stmt.getObject(1);
stmt.close();
conn.close();
}Hi,
Sorry but I'd refer you to the following sections (and code samples/snippets) in my book:
Mapping User-Defined Object Types (AD) to oracle.sql.STRUCT in section 3.3, shows how to pass user defined types as IN, OUT,IN/OUT
JMS over Streams/AQ in the Database: shows how to consume AQ
message paylod in section 4.2.4
CorporateOnine, in section 17.2, show how to exchanges user defined type objects b/w AQ and JMS
All these will hopefully help you achieve what you are trying to do.
Kuassi -
Problem calling stored procedure with user-defined type of input parameters
Hi,
I have to call a stored procedure with IN parameters, but these are user-defined types of input parameters.
function fv_createnews (
pit_groups in T_APPLICATION_USER_GROUPS,
pit_documents in T_DOCUMENTS
return varchar2;
TYPE T_APPLICATION_USER_GROUPS IS
TABLE OF varchar2(500)
INDEX BY binary_integer;
TYPE T_DOCUMENT IS record (
name varchar2(256)
,url varchar2(1024)
,lang varchar2(30)
,foldername varchar2(150)
TYPE T_DOCUMENTS IS
TABLE OF T_DOCUMENT
INDEX BY binary_integer;
How can I do this using the TopLink 10.1.3 API.
I already found following related posts, but I still can' t make it up:
Using VARRAYs as parameters to a Stored Procedure
Pass Object as In/Out Parameter in Stored Procedure
Or do I have to create my own PreparedStatement for this special stored procedure call using Java and Toplink?As the related posts suggest, you will need to use direct JDBC code for this.
Also I'm not sure JDBC supports the RECORD type, so you may need to wrap your stored functions with ones that either flatten the record out, or take OBJECT types. -
Dose oracle.sql.ArrayDescriptor support the user defined type in package?
Hi folks:
I get a obstacle in calling stored procedure by using JDBC driver (ojdbc14.jar).
I have the following code:
create or replace package xxx AS
type var_table is table of varchar2(50);
procedure(parameter in var_table);
end xxx;
When I use the jdbc driver try to create a type for
oracle.sql.ArrayDescriptor arrayDes = oracle.sql.ArrayDescriptor.createDescriptor( "var_table ",connection);
The SQLException is thrown out like those:
Invalid name pattern:user_schema. var_table
So, my question is : Dose oracle.sql.ArrayDescriptor not support the user defined type in package? And I also tried to define such type by using sql "create xxxx" outside of package, then there is no SQLException.
Hopefully for your response and suggestion.Thanks...To my knowledge, the Oracle JDBC driver does not support using the ArrayDescriptor for array data types (varray or nested table) that are defined inside of a package. The same is true for StructDescriptor as well. If you want to use array and object data types, you must define them outside of a package. Then you'll be able to use the descriptors in your JDBC programs.
-
Cannot SELECT into a user-defined type variable
Hi All,
Oracle 11.2 on Linux.
See the steps below. I am not able to insert/select into a TYPE variable. I do not want to do a TABLE declaration in my PL/SQL block, but want to use a user defined type. Is it possible ?
SQL> create or replace type sample_obj_rec as object
2 (
3 object_id number,
4 object_name varchar2(32),
5 object_type varchar2(32)
6 );
7 /
Type created.
SQL> create or replace type sample_obj_tab as table of sample_obj_rec ;
2 /
Type created.
-- ------------ CASE 1 ---------------------
SQL> declare
2 v_tab sample_obj_tab := sample_obj_tab() ;
3 begin
4 select object_id, object_name, object_type
5 bulk collect into v_tab
6 from dba_objects
7 where rownum < 11 ;
8 end ;
9 /
from dba_objects
ERROR at line 6:
ORA-06550: line 6, column 5:
PL/SQL: ORA-00947: not enough values
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignored
-- ------------ CASE 2 ---------------------
SQL> declare
2 v_rec sample_obj_rec;
3 begin
4 select object_id, object_name, object_type
5 into v_rec
6 from dba_objects
7 where rownum = 1;
8 end ;
9 /
from dba_objects
ERROR at line 6:
ORA-06550: line 6, column 5:
PL/SQL: ORA-00947: not enough values
ORA-06550: line 4, column 5:
PL/SQL: SQL Statement ignoredWhat is the issue with both the above cases? what am I missing here?
Thanks in advance.One small detail in the SELECT.
SQL> create or replace type sample_obj_rec as object
2 (object_id number,
3 object_name varchar2(32),
4 object_type varchar2(32));
5 /
Type created.
SQL>
SQL> create or replace type sample_obj_tab as table of sample_obj_rec ;
2 /
Type created.
SQL>
SQL> declare
2 v_tab sample_obj_tab := sample_obj_tab() ;
3 begin
4 select sample_obj_rec(object_id, object_name, object_type)
5 bulk collect into v_tab
6 from dba_objects
7 where rownum < 11 ;
8 end ;
9 /
PL/SQL procedure successfully completed.
SQL> -
Oracle 11g AQ : problem enqueue user-defined type with varchar2 attribute
Hello.
I have a problem enqueuing a user-defined type to the queue on Oracle 10g.
I'm using jdbc driver (ojdbc5.jar, version 11.1.0.6.0) as they provide oracle.jdbc.aq package.
The type is following:
CREATE OR REPLACE TYPE FIXED_T5 AS OBJECT
(id integer,
label varchar2(100),
code integer,
today date
)I have created a java class for this type with jpub utility supplied with oracle 11g client package:
jpub -user=scott/tger -url=jdbc:oracle:thin:@host:sid-sql=FIXED_T5:ru.invito.FixedType -compile=falseIt generated FixedType.java and FixedTypeRef.java files. Don't understand why i need the latter (FixedTypeRef).
Then in test app:
package ru.invito;
import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Properties;
import java.util.UUID;
import junit.framework.TestCase;
import oracle.jdbc.aq.AQAgent;
import oracle.jdbc.aq.AQEnqueueOptions;
import oracle.jdbc.aq.AQFactory;
import oracle.jdbc.aq.AQMessage;
import oracle.jdbc.aq.AQMessageProperties;
import oracle.jdbc.aq.AQEnqueueOptions.DeliveryMode;
import oracle.jdbc.aq.AQEnqueueOptions.VisibilityOption;
import oracle.jdbc.driver.OracleConnection;
import oracle.jdbc.driver.OracleDriver;
import oracle.sql.Datum;
import oracle.sql.STRUCT;
import oracle.sql.StructDescriptor;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class AqTest extends TestCase {
protected Log logger = LogFactory.getLog(getClass());
public void testEnqueue() throws Exception {
OracleDriver dr = new OracleDriver();
Properties prop = new Properties();
prop.setProperty("user", Config.USERNAME);
prop.setProperty("password", Config.PASSWORD);
OracleConnection connection = (OracleConnection) dr.connect(Config.JDBC_URL, prop);
assertNotNull(connection);
connection.setAutoCommit(false);
enqueueMessage(connection, "INVITO.FIXED_T5Q", null);
connection.commit();
private void enqueueMessage(OracleConnection conn, String queueName, AQAgent[] recipients) throws SQLException,
IOException {
logger.debug("----------- Enqueue start ------------");
AQMessageProperties props = makeProps(queueName);
AQMessage mesg = AQFactory.createAQMessage(props);
String msqText = String.format("Hello, %s!", queueName);
FixedType data = createData(36, msqText);
Datum d = data.toDatum(conn);
STRUCT s = (STRUCT) d;
debugStruct("s", s);
String toIdStr = byteBufferToHexString(s.getDescriptor().getOracleTypeADT().getTOID(), 20);
logger.debug("s.toIdStr: " + toIdStr);
StructDescriptor sd = StructDescriptor.createDescriptor("INVITO.FIXED_T5", conn);
logger.debug("sd.toXMLString(): " + sd.toXMLString());
mesg.setPayload(s);
AQEnqueueOptions opt = makeEnqueueOptions();
logger.debug("sending............");
// execute the actual enqueue operation:
conn.enqueue(queueName, opt, mesg);
debugMessageId(mesg);
logger.debug("----------- Enqueue done ------------");
private void debugMessageId(AQMessage mesg) throws SQLException {
byte[] mesgId = mesg.getMessageId();
if (mesgId == null) {
throw new IllegalStateException("message id is NULL");
String mesgIdStr = byteBufferToHexString(mesgId, 20);
logger.debug("Message ID from enqueue call: " + mesgIdStr);
* @return
* @throws SQLException
private FixedType createData(int ID, String label) throws SQLException {
FixedType data = new FixedType();
data._struct.setNChar(1);// initializes the flag for 'label' field
data.setId(ID);
data.setLabel(label);
data.setCode(1);
Date today = new Date();
data.setToday(new Timestamp(today.getTime()));
return data;
* @param string
* @param s
* @throws SQLException
private void debugStruct(String string, STRUCT s) throws SQLException {
logger.debug(s + ".debugString(): " + s.debugString());
logger.debug(s + "s.dump(): " + s.dump());
* @return
* @throws SQLException
private AQAgent makeAgent() throws SQLException {
AQAgent ag = AQFactory.createAQAgent();
ag.setName("AQ_TEST");
String agentAddress = null;
try {
agentAddress = InetAddress.getLocalHost().getHostAddress();
catch (UnknownHostException e) {
logger.error("cannot resolve localhost ip address. will not set it as AQ Agent address");
agentAddress = "NA";
ag.setAddress(agentAddress);
return ag;
private AQMessageProperties makeProps(String queueName) throws SQLException {
final String EXCEPTION_Q_TEMPLATE = "AQ$_%sT_E";
final int DEFAULT_DELAY = 0;
final int DEFAULT_EXPIRATION = -1;
final int DEFAULT_PRIORITY = 0;
AQMessageProperties propeties = AQFactory.createAQMessageProperties();
propeties.setCorrelation(UUID.randomUUID().toString());
propeties.setDelay(DEFAULT_DELAY);
propeties.setExceptionQueue(String.format(EXCEPTION_Q_TEMPLATE, queueName));
propeties.setExpiration(DEFAULT_EXPIRATION);
propeties.setPriority(DEFAULT_PRIORITY);
// propeties.setRecipientList(null);//should not set
propeties.setSender(makeAgent());
return propeties;
* @return
* @throws SQLException
private AQEnqueueOptions makeEnqueueOptions() throws SQLException {
AQEnqueueOptions opt = new AQEnqueueOptions();
opt.setRetrieveMessageId(true);
// these are the default settings (if none specified)
opt.setDeliveryMode(DeliveryMode.PERSISTENT);
opt.setTransformation(null);
opt.setVisibility(VisibilityOption.ON_COMMIT);
return opt;
* Form the AQ reference
* @param buffer
* @param maxNbOfBytes
* @return
private static final String byteBufferToHexString(byte[] buffer, int maxNbOfBytes) {
if (buffer == null)
return null;
int offset = 0;
StringBuffer sb = new StringBuffer();
while (offset < buffer.length && offset < maxNbOfBytes) {
String hexrep = Integer.toHexString((int) buffer[offset] & 0xFF);
if (hexrep.length() == 1)
hexrep = "0" + hexrep;
sb.append(hexrep);
offset++;
String ret = sb.toString();
return ret;
}The output is following:
[main] 2008-07-03 19:09:49,863 DEBUG [ru.invito.AqTest] - ----------- Enqueue start ------------
[main] 2008-07-03 19:09:50,348 DEBUG [ru.invito.AqTest] - [email protected](): name = INVITO.FIXED_T5 length = 4 attribute[0] = 36 attribute[1] = Hell
o, INVITO.FIXED_T5Q! attribute[2] = 1 attribute[3] = 2008-07-03 19:09:49.0
[main] 2008-07-03 19:09:50,363 DEBUG [ru.invito.AqTest] - [email protected](): name = INVITO.FIXED_T5
length = 4
ID = 36
LABEL = Hello, INVITO.FIXED_T5Q!
CODE = 1
TODAY = 2008-07-03 19:09:49.0
[main] 2008-07-03 19:09:50,363 DEBUG [ru.invito.AqTest] - s.toIdStr: 507ccce5b6e9f572e040007f01007203
[main] 2008-07-03 19:09:50,363 DEBUG [ru.invito.AqTest] - sd.toXMLString(): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<StructDescriptor sqlName="INVITO.FIXED_T5" >
<OracleTypeADT sqlName="INVITO.FIXED_T5" typecode="0" tds_version="1"
is_embedded="false" is_top_level="true" is_upt="false" finalType="true" subtype="false">
<attributes>
<attribute name="ID" type="INTEGER" >
<OracleType typecode="2" />
</attribute>
<attribute name="LABEL" type="VARCHAR2" >
<OracleType typecode="12" />
</attribute>
<attribute name="CODE" type="INTEGER" >
<OracleType typecode="2" />
</attribute>
<attribute name="TODAY" type="DATE" >
<OracleType typecode="0" />
</attribute>
</attributes>
</OracleTypeADT>
</StructDescriptor>
[main] 2008-07-03 19:09:50,379 DEBUG [ru.invito.AqTest] - sending............
[main] 2008-07-03 19:09:50,395 DEBUG [ru.invito.AqTest] - Message ID from enqueue call: 511ff143bd4fa536e040007f01003192
[main] 2008-07-03 19:09:50,395 DEBUG [ru.invito.AqTest] - ----------- Enqueue done ------------But when dequeueing the 'label' attribute is lost:
DECLARE
dequeue_options DBMS_AQ.dequeue_options_t;
message_properties DBMS_AQ.message_properties_t;
message_handle RAW(16);
message fixed_t5;
BEGIN
dequeue_options.navigation := DBMS_AQ.FIRST_MESSAGE;
DBMS_AQ.DEQUEUE(
queue_name => 'fixed_t5q',
dequeue_options => dequeue_options,
message_properties => message_properties,
payload => message,
msgid => message_handle);
DBMS_OUTPUT.PUT_LINE('ID : '||message.id);
DBMS_OUTPUT.PUT_LINE('Label: '||message.label);
DBMS_OUTPUT.PUT_LINE('Code : '||message.code);
DBMS_OUTPUT.PUT_LINE('Today: '||message.today);
COMMIT;
END;
ID : 36
Label:
Code : 1
Today: 03.07.08
Could anyone tell me what is wrong with the setup/code?
Why 'label' not saved in queue, though i saw it is not empty in STRUCT?Thank you for the reply!
I have enqueued:
[main] 2008-07-04 15:30:30,639 DEBUG [ru.invito.UserDefinedTypeAqTest$1] - [email protected](): name = INVITO.FIXED_T5
length = 4
ID = 41
LABEL = Hello, INVITO.FIXED_T5Q!
CODE = 1
TODAY = 2008-07-04 15:30:30.0and in table (select * from FIXED_T5QT) the 'label' is blank:
Q_NAME FIXED_T5Q
MSGID 51310809B5EA3728E040007F01000C79
CORRID b8f38fd3-4fa6-4e0f-85d1-2440d02d655e
PRIORITY 0
STATE 0
DELAY
EXPIRATION
TIME_MANAGER_INFO
LOCAL_ORDER_NO 0
CHAIN_NO 0
CSCN 0
DSCN 0
ENQ_TIME 04.07.2008 15:28:44
ENQ_UID INVITO
ENQ_TID 4012
DEQ_TIME
DEQ_UID
DEQ_TID
RETRY_COUNT 0
EXCEPTION_QSCHEMA AQ$_INVITO
EXCEPTION_QUEUE FIXED_T5QT_E
STEP_NO 0
RECIPIENT_KEY 0
DEQUEUE_MSGID
SENDER_NAME AQ_TEST
SENDER_ADDRESS 10.1.1.137
SENDER_PROTOCOL
USER_DATA.ID 41
USER_DATA.LABEL
USER_DATA.CODE 1
USER_DATA.TODAY 04.07.2008 15:30:30I must point to a strange thing: when the FixedType instance is created (via new operator) and then the setLabel("....") called as:
FixedType data = new FixedType();
// hack: proper initialization for 'label' field
data._struct.setNChar(1);
data.setId(ID);
data.setLabel(label);
data.setCode(1);
Date today = new Date();
data.setToday(new Timestamp(today.getTime()));
Datum d = data.toDatum(connection);
STRUCT s = (STRUCT) d;
logger.debug(s + ".debugString(): " + s.debugString());
logger.debug(s + ".dump(): " + s.dump());and if i comment line (data._struct.setNChar(1);) the debug messages for created STRUCT also shows empty value for label.
But if i explicitly call data._struct.setNChar(1) then debug contains the label i defined in call to the setLabel method. -
Is there any way to use a For Each Loop for each property of an User Defined Type?
Is there any way to use a For Each Loop for each property of an User Defined Type? That would be very handy!
Jorge Barbi Martins ([email protected])Alas, no, not in VBA.
Regards, Hans Vogelaar (http://www.eileenslounge.com) -
Issue in passing Oracle User Defined Types to PL SQL from Websphere Applica
HI,
I am facing an issue when trying to pass Oracle collection object(User Defined Types) from Java to PL SQL. The issue happens inside J2EE application which is running inside Websphere Application Server 6.x. My database is Oracle 10g and i am using ojdbc1.4.jar as thin driver.
The issue is that when i pass the Oracle Object from java side, the attribute values of the collection objects at the Oracle PL SQL side is coming as empty. I have tried the same java code in a standalone application and it works fine. The issue happens only when the application is running inside WAS.
Anybody has any idea how to pass Oracle User Defined Types from WAS 6.x server to Oracle PL SQL?Andy Bowes wrote:
Hi
I am using WebLogic 8.14 & Oracle 9i with thin JDBC driver.
Our application needs to perform the same DB operation for every item in a Java Collection. I cannot acheive the required performance using the standard Prepare & Execute loop and so I am looking to push the whole collection to Oracle in a single invocation of a Stored Procedure and then loop on the database.
Summary of Approach:
In the Oracle database, we have defined a Object Type :
CREATE OR REPLACE
TYPE MYTYPE AS OBJECT
TxnId VARCHAR2(40),
Target VARCHAR2(20),
Source VARCHAR2(20),
Param1 VARCHAR2(2048),
Param2 VARCHAR2(2048),
Param3 VARCHAR2(2048),
Param4 VARCHAR2(2048),
Param5 VARCHAR2(2048),
and we have defined a collection of these as:
CREATE OR REPLACE
TYPE MYTYPE_COLLECTION AS VARRAY (100) OF MYTYPE
There is a stored procedure which takes one of these collections as an input parameter and I need to invoke these from within my code.
I am having major problems when I attempt to get the ArrayDescriptor etc to allow me to create an Array to pass to the stored procedure. I think this is because the underlying Oracle connection is wrapped by WebLogic.
Has anyone managed to pass an array to an Oracle Stored procedure on a pooled DB connection?
Thanks
AndyHi. Here's what I suggest: First please get the JDBC you want to work in a
small standalone program that uses the Oracle thin driver directly. Once
that works, show me the JDBC code, and I will see what translation if
any is needed to make it work with WLS. Will your code be running in
WebLogic, or in an external client talking to WebLogic?
Also, have you tried the executeBatch() methods to see if you can
get the performance you want via batches?
Joe
Maybe you are looking for
-
How to create user in specific user group in Microsoft Active Directory ?
Hi, I am using Nestcape LDAP, and want to create user in the user defined group. I have created a new user group "TestUsers" in the "Users" container of Active Directory, I want to add the new user to Test Users group But my problem is that whenever
-
Rename of Business systems and channels in PRD system
Hi all, I am doing a rework of some scenarios in PI. I will rename business systems and channels. When we move the new objects to Prduction and activate what is the best order to stop processing in PI before the switch over. Is it 1)Stop PI inbound q
-
Float problems in Dreamweaver CS3
I am having problems creating a 2-column layout to display my main page content alongside a sidebar containing a simple payment signup form. I have set up DIVs for each... no problem. I have applied a left float property to the sidebar, but I can't g
-
Bytes is greater than maxbytes in dba_data_files
Hi, In what situation can the size of bytes be greater than the size of maxbytes in the dba_data_files? select bytes,user_bytes,maxbytes from dba_data_files where bytes > maxbytes BYTES USER_BYTES MAXBYTES 10485760000 10485694464 6392
-
PanelBinding.stopEditing()
Hi all, I have the following scenario in my JClient application. The user modifies a row in my DB. If the user just modifies one attribute and does not navigate out off this field, the transaction is not marked as dirty and therefore my question dial