Oracle Messaging Gateway vs. Oracle Procedural Gateway
What is difference between Oracle Messaging Gateway for IBM MQSeries and Oracle Procedural Gateway for IBM MQSeries? Which one is the best solution for IBM WebSphere MQ integration from architecture design point of view? Does anyone have any documentation on comparing Oracle Messaging Gateway for IBM MQSeries with Oracle Procedural Gateway for IBM MQSeries, for example, pros and cons etc?
Any help will be greatly appreciated.
Yang
Dear Yang!
I have the same problem considering the two possibilities to connect ibm with oracle...
Did you get some useful information or do you have some experience now? If yes could you please update the post!
Thanks
Markus
Similar Messages
-
Using oracle procedural gateway to connect to mq series
Hi,
I am working on setting up my connection to export data from oracle database to db2 using mq-series.
MQ-Series client software and oracle procedural gateway v9 are installed on HP-UX .
initsid.ora & initsid.gtwboot file for the gateway are configured. listener.ora and tnsnames.ora are also configured and running.
I created a dblink and then tried to test my connection using the test scripts given by IBM.
I got the following error,
ORA-04052: error occurred when looking up remote object [email protected]
ORA-00604: error occurred at recursive SQL level 1
ORA-28509: unable to establish a connection to non-Oracle system
ORA-02063: preceding line from DCY3
I generated a trace and I got the following information from listener.trc
nsopen: opening transport...
nttcnp: Validnode Table IN use; err 0x0
nttcnp: getting sockname
nttcnr: waiting to accept a connection.
nttcnr: getting sockname
nttvlser: valid node check on incoming node 172.25.228.7
nttvlser: Accepted Entry: 172.25.228.7
nttcon: set TCP_NODELAY on 11
nsopen: transport is open
nsnainit: inf->nsinfflg[0]: 0xd inf->nsinfflg[1]: 0xd
nsopen: global context check-in (to slot 4) complete
nsanswer: deferring connect attempt; at stage 5
nscon: doing connect handshake...
nscon: got NSPTCN packet
nsevdansw: exit
nsbeqaddr: connecting...
sntpcall: About to exec /u46/oracle/app/oracle/product/bin/pg4mqc90drv
sntpcall: detaching from parent with additional fork
sntpcall: only 0 bytes read
sntpcall: Can't read from pipe; err[1] = 32
nserror: nsres: id=4, op=72, ns=12547, ns2=12560; nt[0]=517, nt[1]=32, nt[2]=0;
ora[0]=0, ora[1]=0, ora[2]=0
nscon: sending NSPTRF packet
nstimarmed: no timer allocated
nsclose: closing transport
nsclose: global context check-out (from slot 4) complete
nsglecmd: Deallocating cxd 0x40045ef0.
Listener.log gave me the following information,
12-JAN-2010 14:47:34 * (CONNECT_DATA=(SID=dcy3)) * (ADDRESS=(PROTOCOL=tcp)(HOST=
172.25.228.7)(PORT=59501)) * establish * dcy3 * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
HPUX Error: 32: Broken pipe
I researched online and made sure that I have enough swap,memory on my OS.I increased the value for processes in init.ora file.
My log files have not exceeded the maximum limit.
The trace shows that my listener is loosing contact when it is trying to read the driver from /u46/oracle/app/oracle/product/bin/pg4mqc90drv.
I am not sure how to proceed from this point,though I have a thought of relinking my libraries in oracle.
Can anyone give any information on this.Hi,
listener.ora,
DCY3LSNR =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL=IPC)
(KEY=ORAIPC)
(ADDRESS =
(PROTOCOL=TCP)
(HOST=fngtest)
(PORT=1414)
SID_LIST_DCY3LSNR =
(SID_LIST =
(SID_DESC =
(SID_NAME=DCY3)
(ORACLE_HOME=/u46/oracle/app/oracle/product)
(PROGRAM=pg4mqc90drv)
STARTUP_WAIT_TIME_DCY3LSNR=0
CONNECT_TIMEOUT_DCY3LSNR=1000
TRACE_LEVEL_DCY3LSNR=4
TRACE_DIRECTORY_DCY3LSNR=/u46/oracle/app/oracle/product/network/trace
TRACE_FILE_DCY3LSNR=listener
LOG_DIRECTORY_DCY3LSNR=/u46/oracle/app/oracle/product/network/log
LOG_FILE_DCY3LSNR=listener
$ cat initDCY3.ora
#===========================================================================
# GATEWAY INITIALIZATION FILE:
# Oracle Procedural Gateway for IBM MQSeries Client (pg4mqc90).
#===========================================================================
SET HS_DB_NAME=
SET HS_DB_DOMAIN=
SET LOG_DESTINATION=/u46/oracle/app/oracle/product/pg4mqseries/log/DCY3.log
SET QUEUE_MANAGER=DCY3
SET AUTHORIZATION_MODEL=RELAXED
SET TRANSACTION_MODEL=SINGLE_SITE
SET TRANSACTION_LOG_QUEUE=tx_queue_name
SET TRANSACTION_RECOVERY_USER=rec_user
SET TRANSACTION_RECOVERY_PASSWORD=rec_password
SET TRACE_LEVEL=0
$ cat initDCY3.gtwboot
#============================================================================
# GATEWAY BOOT FILE:
# Oracle Procedural Gateway for IBM MQSeries Client (pg4mqc90).
#============================================================================
GATEWAY_SID=DCY3
SERVER_PATH=/u46/oracle/app/oracle/product/bin/pg4mqc90
LOG_DESTINATION=/u46/oracle/app/oracle/product/pg4mqseries/log/DCY3boot.log
LD_LIBRARY_PATH=/usr/lib:/opt/mqm/lib:/u46/oracle/app/oracle/product/lib
MQSERVER=FNGTEST.DCY3/TCP/TCPIP03
#MQCCSID=850
#MODE=DEBUG
I have pasted my listener.ora and init files.
Can anyone pls give me more information on this. -
Sending message from oracle to middleware through oracle messaging gateway
Hi,
I am very new to oracle AQ and oracle messaging gateway. I am actually trying to propagate a message from oracle to middleware through oracle messaging gateway.
I have created the link between oracle messaging gateway and middleware(IBM Websphere).
1.*Created an object type with a single attribute of type sys.xmltype*.
create or replace type xpctas_type as object(payload sys.xmltype);
2.*Created a qtable with payload type as xpctas_type, a queue and started the queue.*begin
dbms_aqadm.create_queue_table(
queue_table => 'xpctas_qtab',
queue_payload_type => 'xpctas_type',
multiple_consumers => TRUE
dbms_aqadm.create_queue(queue_name =>'xpctas_q',
queue_table => 'xpctas_qtab',
max_retries => 16);
dbms_aqadm.start_queue('xpctas_q');
end;
3.*Created a transformation that converts user defined type xpctas_type to messaging gateway canonical type sys.MGW_BASIC_MSG_T.*
For this I created a function that converts xpctas_type to messaging gateway canonical type sys.MGW_BASIC_MSG_T.
CREATE OR REPLACE FUNCTION APPS.order_2_basic(my_order in xpctas_type)
RETURN sys.mgw_basic_msg_t
IS
v_xml XMLTYPE;
v_text varchar2(4000);
v_clob CLOB;
v_basic sys.mgw_basic_msg_t;
text_body sys.mgw_text_value_t;
header sys.mgw_name_value_array_t;
BEGIN
v_xml := XMLTYPE.createXML(my_order,NULL,NULL);
v_basic := sys.mgw_basic_msg_t.construct;
header := sys.mgw_name_value_array_t(sys.mgw_name_value_t.construct_integer('MGW_MQ_characterSet','1208'),
sys.mgw_name_value_t.construct_integer('MGW_MQ_priority', '7'));
IF(LENGTH(v_xml.getstringval())>0 AND LENGTH(v_xml.getstringval())<=4000) THEN
v_text := v_xml.getStringVal();
text_body := sys.mgw_text_value_t(v_text,NULL);
ELSE
dbms_lob.createtemporary(v_clob,TRUE,dbms_lob.session);
v_clob:=v_xml.getClobVal();
text_body := sys.mgw_text_value_t(NULL,v_clob);
dbms_lob.freetemporary(v_clob);
END IF;
v_basic:=sys.mgw_basic_msg_t(header,text_body,NULL);
RETURN v_basic;
END order_2_basic;
begin
dbms_transform.create_transformation(
schema => 'apps',
name => 'order_to_basic',
from_schema => 'apps',
from_type => 'xpctas_type',
to_schema => 'sys',
to_type => 'mgw_basic_msg_t',
transformation => 'Apps.order_2_basic(source.user_data)');
end;
4. Registered a foreign queue.
declare
v_options sys.mgw_properties;
gv_mq_queue_name VARCHAR2(32);
begin
gv_mq_queue_name := 'MB.O2C.SOFTWARESOLUTION';
v_options := sys.mgw_properties(
sys.mgw_property('MQ_openOptions', '2066') );
dbms_mgwadm.register_foreign_queue(
name => 'destq', -- MGW foreign queue name
linkname => 'mqlink', -- name of link to use
provider_queue => RTRIM(gv_mq_queue_name), -- name of MQSeries queue
domain => dbms_mgwadm.DOMAIN_QUEUE, -- single consumer queue
options => v_options );
end;
5. Added a subscriber with transformation.
begin
dbms_mgwadm.add_subscriber(
subscriber_id => 'sub_aq2mq', -- MGW subscriber name
propagation_type => dbms_mgwadm.outbound_propagation,
queue_name => 'apps.xpctas_q',
destination => 'destq@mqlink',
transformation => 'apps.order_to_basic');
end;
6. Added a scheduler
begin
dbms_mgwadm.schedule_propagation(
-- schedule name
schedule_id => 'sch_aq2mq',
-- outbound propagation
propagation_type => dbms_mgwadm.outbound_propagation,
-- AQ queue name
source =>'apps.xpctas_q',
-- MGW foreign queue with link
destination =>'destq@mqlink');
-- The remaining fields currently not used by MGW
end;
7. Enqueued a user defined data type into the qtable.
declare
l_xmlstring varchar2(2000);
l_payload sys.xmltype;
my_order xpctas_type;
enqueue_options DBMS_AQ.enqueue_options_t;
message_properties DBMS_AQ.message_properties_t;
msgid RAW( 16 );
v_num Number;
begin
SELECT '<?xml version="1.0" encoding="UTF-8" ?>
<Q1:XXRFG_PRCS_CNCT_TO_ASSETS_STG xmlns:Q1="http://www.ibm.com/websphere/crossworlds/2002/BOSchema/XXRFG_PRCS_CNCT_TO_ASSETS_STG" version="3.0.0" verb="Create" locale="en_US.UTF-8" delta="false">
<Q1:STAGING_ID>221</Q1:STAGING_ID>
<Q1:SW_INSTANCE_ID>18595755</Q1:SW_INSTANCE_ID>
<Q1:MC_INSTANCE_ID>194734</Q1:MC_INSTANCE_ID>
<Q1:OPCO>NUK</Q1:OPCO>
<Q1:RELATIONSHIP_FLAG>N</Q1:RELATIONSHIP_FLAG>
<Q1:RELATIONSHIP_TYPE>Connected To</Q1:RELATIONSHIP_TYPE>
<Q1:ObjectEventId />
</Q1:XXRFG_PRCS_CNCT_TO_ASSETS_STG>'
INTO l_xmlstring
FROM dual;
SELECT XMLTYPE(l_xmlstring)
INTO l_payload
FROM dual;
my_order:=xpctas_type(l_payload);
dbms_output.put_line(my_order.payload.getstringval());
DBMS_AQ.enqueue( queue_name => 'APPS.xpctas_q',
enqueue_options => enqueue_options,
message_properties => message_properties,
payload => my_order,
msgid => msgid
COMMIT;
END;
As soon as I enqueued the message the subscriber picked the message and sent it to middleware. I found the below message in the middleware
MD ÿÿÿÿ ¸ MQSTR AMQ HBU473QC61 PTÀ+H^ HBU473QC61 mqm 2012112109335869 ÿÿÿÿ
*<XPCTAS_TYPE><PAYLOAD><Q1:XXRFG_PRCS_CNCT_TO_ASSETS_STG xmlns:Q1="http://www.ibm.com/websphere/crossworlds/2002/BOSchema/XXRFG_PRCS_CNCT_TO_ASSETS_STG" version="3.0.0" verb="Create" locale="en_US.UTF-8" delta="false">*
*<Q1:STAGING_ID>221</Q1:STAGING_ID>*
*<Q1:SW_INSTANCE_ID>18595755</Q1:SW_INSTANCE_ID>*
*<Q1:MC_INSTANCE_ID>194734</Q1:MC_INSTANCE_ID>*
*<Q1:OPCO>NUK</Q1:OPCO>*
*<Q1:RELATIONSHIP_FLAG>N</Q1:RELATIONSHIP_FLAG>*
*<Q1:RELATIONSHIP_TYPE>Connected To</Q1:RELATIONSHIP_TYPE>*
*<Q1:ObjectEventId/>*
*</Q1:XXRFG_PRCS_CNCT_TO_ASSETS_STG>*
*</PAYLOAD></XPCTAS_TYPE>*
It has some junk data in the begining. How can I remove this junk data?? Any help provided on this would be of great help.
Experts on oracle mesaging gateway and AQ, Please help.
Thanks & Regards,
SachinHello,
your setup of the message gateway seems to be ok.
Did you check the corresponding versions of the client libraries (*.jar) ? These are the libraries on
db server side (e.g. aqapi.jar, based on your CLASSPATH entries in file "mgw.ora") and for the IBM MQ jars.
Kind regards,
WoG -
Send JMS messages from Oracle Procedure
Hi
I need to write an Oracle procedure that would send a JMS message. So please share your thoughts on how this can be done in Oracle.
thank yousdk11 wrote:
Hi
I need to write an Oracle procedure that would send a JMS message. So please share your thoughts on how this can be done in Oracle.
thank youhttp://www.lmgtfy.com/?q=Oracle+procedure+that+would+send+a+JMS+message
Handle: sdk11
Status Level: Newbie
Registered: Jan 13, 2010
Total Posts: 56
Total Questions: 30 (27 unresolved)
why so many unanswered questions?
Edited by: sb92075 on Jan 12, 2012 8:44 AM -
Messaging Gateway agent not starting
I have configured Messaging gateway for connecting Oracle AQ to Websphere MQ. Oracle version is Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production on Linux. I was able to execute all the steps as documented in user's guide without any issues. However now when I try to start the Messaging gateway agent, it gives following error ORA-28575: unable to open RPC connection to external procedure agent.
I have tried changing listener.ora without any luck. Is there any compatibility issue between 64-bit linux and MGW? Enclosed below are the entries from my listener.ora
# Define "where" to listen
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = AVAQD))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
(ADDRESS = (PROTOCOL = TCP)(Host = adaq03.oneabbott.com)(Port = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
# Pre-Defined Services
# ~~~~~~~~~~~~~~~~~~~~~~~~~~
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SDU = 1460)
(SID_NAME = AVAQD)
(GLOBAL_DBNAME = AVAQD)
(SERVICE_NAME = AVAQD.world)
(ORACLE_HOME = /ofa/product/10.2.0/DB)
(SID_DESC =
(SID_NAME = mgwextproc)
(ENVS = EXTPROC_DLLS=/oracle_home/lib32/libmgwagent.so, LD_LIBRARY_PATH=/oracle_home/jdk/jre/lib/i386:/oracle_home/jdk/jre/lib/i386/server:/oracle_home/lib32)
(ORACLE_HOME = /ofa/product/10.2.0/DB)
(PROGRAM = /ofa/product/10.2.0/DB/bin/extproc32)
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /ofa/product/10.2.0/DB)
# (ENVS=EXTPROC_DLLS=/ofa/product/10.2.0/DB/lib32/av_extproc_LINUX.so)
(PROGRAM = extproc)
Thanks in advance
KiranHi,
I got this working finally. All of the issues were mainly related to properly setting environment variable LD_LIBRARY_PATH. Oracle Metalink helped in solving those issues so I recommend searching there first if you are getting stuck.
Regards
Kiran -
Messaging Gateways (MQ for example)
Hi there,
Is it possible to use Enterprise Messaging Gateways on standard edition Oracle.
I would like to give my clients the option of what version they wish to use but need to connect to MQ Series.
If the Oracle Product does not allow this, are there any other 'Gateway' providors that do develop such a bridge for the Standard edition.
Many ThanksWrong place to ask this.
This forum is for the Sun MQ, not the IBM MQ. I would suggest, either going to the IBM site for this, or to the http://forum.java.sun.com/forum.jspa?forumID=29 on the JMS specifications.
TE -
Hi all,
I am testing Oralce AQ messaging gateway for IBM Websphere MQ. I followed the Oralce MGW setup guide and set up the admin user and the agent user. All was OK so far. But when I exec dbms_mgwadm.startup, the agent would not start. I did see the agent_status of the mgw_gateway view had START_SCHEDULED and STARTING UNREACHABLE. Then it turned to NOT_STARTED. The log shows this: MGW Engine 0 EXCEPTION main
java.lang.NoClassDefFoundError: oracle/jdbc/OracleDriver. I check my Oracle install, and the file is there. And I also has this line for the CLASSPATH in the mgw.ora file: C:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar (the very first value on the line). I have looked in the /jdbc/lib folder 20 times now and the ojdbc14.jar file is there. Why am getting the mainjava.lang.NoClassDefFoundError? Please help!
BenOK, it turned out that the Oracle installation MGW sample - sample_mgw.ora file has the classpath line wrong:
from the sample file
set CLASSPATH=/myOracleHome/jdbc/lib/ojdbc14.jar:/myOracleHome/jdk/jre/lib/i18n.jar:/myOracleHome/jdk/jre/lib/rt.jar:/myOracleHome/sqlj/lib/runtime12.jar:/myOracleHome/jlib/orai18n.jar:/myOracleHome/jlib/jta.jar:/myOracleHome/rdbms/jlib/jmscommon.jar:/myOracleHome/rdbms/jlib/aqapi13.jar:/opt/mqm/java/lib/com.ibm.mqjms.jar:/opt/mqm/java/lib/com.ibm.mq.jar:/opt/mqm/java/lib:/opt/mqm/java/lib/connector.jar
the colon (:) between each jar file location should be a semi-colon (;). I finally spotted that and replaced it with a semi-colun (;) and now my agent starts running!
Ben -
How to get Messaging Gateway working with MQ Serieson 9.2 on NT
I wonder if you can help me a little more to get a pilot installation running on NT.
I'm trying to get the Message Gateway set up from a 9i Rel2 instance on Windows NT 4.0 SP6a talking to a remote MQ Series Q. The docs are confusing,as they don't seem to be based on 9i Rel 2.
This is my current config:
tnsnames.ora:
MGW_AGENT =(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS= (PROTOCOL=IPC)(KEY=EXTPROC_KEY)))
(CONNECT_DATA = (SID=mgwextproc) (PRESENTATION=RO)))
extproc_connection_data = (DESCRIPTION =(ADDRESS = (PROTOCOL = IPC)(KEY = extproc_key))
(CONNECT_DATA = (SID = extproc)))
listener.ora
listener =( address_list =
(address = (protocol = tcp)(host = swr851)(port = 1521))
(address = (protocol = ipc)(key = extproc_key)))
sid_list_listener = (sid_list =
(sid_desc = (global_dbname = raj1)(oracle_home = d:\oracle\902)(sid_name = raj1))
(sid_desc = (program = extproc)(sid_name = extproc)))
mgw_ora
log_directory=d:\oracle\902\mgw\log
log_level = 2
set LD_LIBRARY_PATH=d:\oracle\902\jdk\jre\lib;d:\oracle\902\rdbms\lib;d:\oracle\902\lib;c:\program files\ibm\mqseries\java\lib
set MGW_PRE_PATH=D:\oracle\902\jdk\jre\bin\classic
set CLASSPATH=D:\oracle\902\jdbc\lib\classes12.zip;d:\oracle\902\jdk\jre\lib\i18n.jar;d:\oracle\902\jdk\jre\lib\rt.jar;d:\oracle\902\sqlj\lib\runtime12.zip;d:\oracle\902\jdbc\lib\nls_charset12.zip;d:\oracle\902\sqlj\lib\translator.zip;d:\oracle\902\jdbc\lib\nls_charset12.zip;d:\oracle\902\mgw\classes\mgw.jar;c:\program files\ibm\mqseries\java\lib
set ORACLE_SID=raj1
when I run dbms_mgwadm.startup, I get ORA-32830: result code -3 returned by Messaging Gateway agent as the last_error_msg when I query mgw_gateway. There is no log generated in $ORACLE_HOME\mgw\log. If I rerun dbms_mgwadm.startup, the agent is reachable - what could be wrong ?Hi,
-3...An error occurred creating the MGW log file. Verify that the log directory is writeable. The default location is <ORACLE_HOME>/mgw/log.
In documentations is described the following on the link:
http://otn.oracle.com/docs/products/oracle9i/doc_library/release2/appdev.920/a96587/qfaqs.htm
What if MGW_GATEWAY view shows LAST_ERROR_MSG of "ORA-32830: result code <value> returned by Messaging Gateway agent?"
The result code may be one of the following:
-1...An error occurred starting the Java Virtual Machine (JVM). Check the MGW log file for an entry that contains one of the following lines.
Can't create Java VM Verify that the Java version you are using is correct. Verify that your operating system version and patch level are sufficient for the JDK version. Verify that you are using a reasonable value for the JVM heap size. The heap size is specified by the max_memory parameter of dbms_mgwadm.alter_agent.
Can't find class oracle.mgw.engine.Agent Verify that the CLASSPATH set in mgw.ora contains mgw.jar. For example:
set CLASSPATH=<ORACLE_HOME>/mgw/classes/mgw.jar
-2...An error occurred reading mgw.ora. Verify that the file is readable.
-3...An error occurred creating the MGW log file. Verify that the log directory is writeable. The default location is <ORACLE_HOME>/mgw/log.
-100...The MGW agent JVM encountered a runtime exception or error on startup.
-101...The MGW agent shut down due to a fatal error. Check the MGW log file.
Zdenek. -
Issu for running insert statement in oracle procedure.
Hi expert,
I ran a oracle procedure with a insert statement inside as:
insert into table1 select....
but I got error message related to this insert statement as "SQLERRM= ORA-08103: object no longer exists"
I ran this statement separately in toad, no error message, but no data result from this execute.
please tell how to fix this issue.
Many Thanks,
Edited by: 918440 on 27-Jun-2012 8:04 AMHi friend,
my insert statement is as follows:
INSERT INTO HIROC_RU_FACT_S
select
pp.policy_fk,
pp.transaction_log_fk,
p.policy_no,
p.policy_type_code,
hiroc_rpt_user.hiroc_get_entity_name(pp.policy_fk,'POLHOLDER') policy_holder,
pp.risk_fk,
r.risk_base_record_fk,
r.entity_fk,
hiroc_sel_entity_risk_name2 (pp.risk_fk,r.entity_fk) risk_name,
substr(trim(nvl(r.county_code_used_to_rate,pth.issue_state_code)),1,2) rating_state_code,
hiroc_get_province_name(substr(trim(nvl(r.county_code_used_to_rate,pth.issue_state_code)),1,2), 'PROVINCE_CODE', 'L') rating_state_name,
hiroc_get_provicne_pol_prefix(substr(trim(nvl(r.county_code_used_to_rate,pth.issue_state_code)),1,2),p.policy_type_code) rating_prov_pol_prefix,
nvl(r.risk_cls_used_to_rate,pth.peer_groups_code) rating_peer_group_code,
hiroc_get_lookup_desc('PEER_GROUP',nvl(r.risk_cls_used_to_rate,pth.peer_groups_code),'L') rating_peer_group_name,
pth.policy_term_history_pk,
pth.term_base_record_fk,
to_char(pth.effective_from_date,'yyyy') term_effective_year,
c.coverage_pk,
c.coverage_base_record_fk,
pc.coverage_code,
c.product_coverage_code,
pc.long_description,
pp.coverage_component_code,
c.effective_from_date,
c.effective_to_date,
cls.coverage_code coverage_class_code,
cls.coverage_long_desc coverage_class_long_desc,
decode(pp.coverage_component_code ,'GROSS',cls.exposure_unit,null) exposure_unit, --hiroc_get_expos_units_by_cov(c.coverage_pk,pc.coverage_code,c.effective_from_date,c.effective_to_date) exposure_unit,
decode(pp.coverage_component_code ,'GROSS',cls.number_of_patient_day,null) number_of_patient_day,
pth.effective_from_date term_eff_from_date,
pth.effective_to_date term_eff_to_date,
pp.premium_amount premium_amount,
(case when (pc.coverage_code in ('CP','MC1','MC2','MC3','MC4','HR','F') or pc.coverage_code like 'ST%') and
pp.coverage_component_code != 'RISKMGMT' then
(nvl(pp.premium_amount,0))
else
0
end) primary_premium,
(hiroc_get_risk_units(hiroc_get_provicne_pol_prefix(substr(trim(nvl(r.county_code_used_to_rate,pth.issue_state_code)),1,2),p.policy_type_code)-- rating_prov_pol_prefix
,nvl(r.risk_cls_used_to_rate,pth.peer_groups_code) -- rating_peer_group_code
,cls.coverage_code --coverage_class_code
,decode(pp.coverage_component_code ,'GROSS',cls.exposure_unit,null)
,pp.premium_amount
,(case when (pc.coverage_code in ('CP','MC1','MC2','MC3','MC4','HR','F') or pc.coverage_code like 'ST%') and
pp.coverage_component_code != 'RISKMGMT' then
(nvl(pp.premium_amount,0))
else
0
end) -- primary_premium
,p.policy_type_code
,trunc(pth.effective_to_date))) risk_units
from proddw_mart.rmv_territory_makeup tm,
proddw_mart.rmv_premium_class_makeup pcm,
proddw_mart.rmv_product_coverage pc,
proddw_mart.rmv_coverage c,
proddw_mart.rmv_risk r,
proddw_mart.rmv_policy_term_history pth,
proddw_mart.rmv_policy p,
proddw_mart.rmv_transaction_log tl,
proddw_mart.rmv_policy_premium pp,
(select /* +rule */
p.policy_no,
p.policy_start_date,
p.policy_end_date,
r.risk_pk,
r.risk_description,
c.coverage_pk,
c.parent_coverage_base_record_fk,
pc.parent_product_covg_code,
pc.coverage_code,
pc.short_description coverage_short_desc,
pc.long_description coverage_long_desc,
c.exposure_unit,
pc.exposure_basis_code,
c.number_of_patient_day,
p.policy_start_date policy_effective_date,
p.policy_end_date policy_expiry_date,
c.effective_from_date,
c.effective_to_date,
to_char(c.effective_from_date,'YYYY') class_eff_year
from proddw_mart.odwr_coverage_only c
,proddw_mart.odwr_product_coverage pc
,proddw_mart.odwr_risk r
,proddw_mart.odwr_policy p
where pc.code = c.product_coverage_code
and pc.parent_product_covg_code is not null -- coverage classes only
and r.risk_pk = c.risk_base_record_fk
and c.accounting_to_date = to_date('1/1/3000','mm/dd/yyyy') -- only open records
and c.base_record_b = 'N'
and p.base_record_b = 'N'
and p.policy_pk = r.policy_fk
and p.accounting_to_date = to_date('1/1/3000','mm/dd/yyyy') -- only open records
group by p.policy_no,
p.policy_start_date,
p.policy_end_date,
r.risk_pk,
r.risk_description,
c.coverage_pk,
c.parent_coverage_base_record_fk,
pc.parent_product_covg_code,
pc.coverage_code,
pc.short_description, -- coverage_short_desc,
pc.long_description, -- coverage_long_desc,
c.exposure_unit,
pc.exposure_basis_code,
c.number_of_patient_day,
p.policy_start_date, -- policy_effective_date,
p.policy_end_date, -- policy_expiry_date,
c.effective_from_date,
c.effective_to_date,
to_char(c.effective_from_date,'YYYY')-- class_eff_year
) cls
where tm.risk_type_code = r.risk_type_code
and tm.county_code = r.county_code_used_to_rate
and tm.effective_from_date <= pp.rate_period_from_date
and tm.effective_to_date > pp.rate_period_from_date
and pcm.practice_state_code (+) = r.practice_state_code
and pcm.risk_class_code (+) = r.risk_cls_used_to_rate
and nvl(pcm.effective_from_date, pp.rate_period_from_date) <= pp.rate_period_from_date
and nvl(pcm.effective_to_date, to_date('01/01/3000','mm/dd/yyyy')) > pp.rate_period_from_date
and pc.code = c.product_coverage_code
and c.base_record_b = 'N'
and ( c.record_mode_code = 'OFFICIAL'
and (c.closing_trans_log_fk is null or
c.closing_trans_log_fk != tl.transaction_log_pk)
or c.record_mode_code = 'TEMP'
and c.transaction_log_fk = tl.transaction_log_pk )
and c.parent_coverage_base_record_fk is null
and c.effective_from_date < c.effective_to_date
and c.effective_from_date <= pp.rate_period_from_date
and c.effective_to_date > pp.rate_period_from_date
and c.accounting_from_date <= tl.accounting_date
and c.accounting_to_date > tl.accounting_date
and c.coverage_base_record_fk=pp.coverage_fk
and r.base_record_b = 'N'
and ( r.record_mode_code = 'OFFICIAL'
and (r.closing_trans_log_fk is null or
r.closing_trans_log_fk != tl.transaction_log_pk)
or r.record_mode_code = 'TEMP'
and r.transaction_log_fk = tl.transaction_log_pk )
and r.effective_from_date < r.effective_to_date
and r.effective_from_date <= pp.rate_period_from_date
and r.effective_to_date > pp.rate_period_from_date
and r.accounting_from_date <= tl.accounting_date
and r.accounting_to_date > tl.accounting_date
and r.risk_base_record_fk = pp.risk_fk
and pth.base_record_b = 'N'
and ( pth.record_mode_code = 'OFFICIAL'
and (pth.closing_trans_log_fk is null or
pth.closing_trans_log_fk != tl.transaction_log_pk)
or pth.record_mode_code = 'TEMP'
and pth.transaction_log_fk = tl.transaction_log_pk )
and pth.accounting_from_date <= tl.accounting_date
and pth.accounting_to_date > tl.accounting_date
and pth.term_base_record_fk = pp.policy_term_fk
and p.policy_pk = pp.policy_fk
and tl.transaction_log_pk = pp.transaction_log_fk
and pp.active_premium_b = 'Y'
and pp.rate_period_type_code in ('CS_PERIOD','SR_PERIOD')
and pp.rate_period_to_date > pp.rate_period_from_date
and tl.accounting_date <= sysdate
and p.policy_cycle_code = 'POLICY'
and substr(p.policy_no,1,1) <> 'Q'
and tl.transaction_log_pk = (select max(pp.transaction_log_fk)
from proddw_mart.rmv_policy_premium pp,proddw_mart.rmv_transaction_log tl2
where pth.term_base_record_fk = pp.policy_term_fk
and pp.transaction_log_fk = tl2.transaction_log_pk
and tl2.accounting_date <= sysdate )
and p.policy_type_code in ('LIABCRIME','MIDWIFE')
and pth.accounting_to_date = to_date('01/01/3000','mm/dd/yyyy') --<<<******* eliminates duplicates
and p.policy_no = cls.policy_no
-- and r.risk_pk = cls.risk_pk
and c.coverage_base_record_fk = cls.parent_coverage_base_record_fk(+)
and cls.effective_from_date < pth.effective_to_date -- from date less than period end date
and cls.effective_to_date > pth.effective_from_date -- to date greater than period start date
and cls.policy_effective_date < pth.effective_to_date -- from date less than period end date
and cls.policy_expiry_date > pth.effective_from_date -- to date greater than period start date
group by pp.policy_fk,
pp.transaction_log_fk,
p.policy_no,
p.policy_type_code,
pp.risk_fk,
r.risk_base_record_fk,
r.entity_fk,
substr(trim(nvl(r.county_code_used_to_rate,pth.issue_state_code)),1,2), -- rating_state_code,
r.county_code_used_to_rate,
pth.issue_state_code,
nvl(r.risk_cls_used_to_rate,pth.peer_groups_code) , -- rating_peer_group_code,
r.risk_cls_used_to_rate,
pth.peer_groups_code,
pth.policy_term_history_pk,
pth.term_base_record_fk,
to_char(pth.effective_from_date,'yyyy'), --term_effective_year,
c.coverage_pk,
c.coverage_base_record_fk,
pc.coverage_code,
c.product_coverage_code,
pc.long_description,
pp.coverage_component_code,
c.effective_from_date,
c.effective_to_date,
cls.coverage_code, -- coverage_class_code,
cls.coverage_long_desc, -- coverage_class_long_desc,
decode(pp.coverage_component_code ,'GROSS',cls.exposure_unit,null),-- exposure_unit,
decode(pp.coverage_component_code ,'GROSS',cls.number_of_patient_day,null), -- number_of_patient_day,
pth.effective_from_date, --term_eff_from_date,
pth.effective_to_date, --, --term_eff_to_date,
pp.premium_amount ;Edited by: BluShadow on 27-Jun-2012 16:12
added {noformat}{noformat} tags for readability. PLEASE READ {message:id=9360002} AS PREVIOUSLY REQUESTED! & -
How to call an Oracle Procedure and get a return value in Php
Hi Everyone,
Has anyone tried calling an Oracle procedure from Php using the ora functions and getting the return value ? I need to use the ora funtions (no oci)because of compatibility and oracle 7.x as the database.
The reason why I post this here is because the ora_exec funtion is returning FALSE but the error code displayes is good. Is this a bug in the ora_exec funtion ?
My code after the connection call is as follows:
$cur = ora_open($this->conn);
ora_commitoff($this->conn);
$requestid = '144937';
echo $requestid;
$rc = ora_parse($cur, "begin p_ins_gsdata2
(:requestid, :returnval); end;");
if ($rc == true) {
echo " Parse was successful ";
$rc2 = ora_bind ($cur, "requestid", ":requestid", 32, 1);
if ($rc2 == true) echo " Requestid Bind Successful ";
$rc3 = ora_bind ($cur, "returnval", ":returnval", 32, 2);
if ($rc3 == true) echo " Returnval Bind Successful ";
$returnval = "0";
$rc4 = ora_exec($cur);
echo " Result = ".$returnval." ";
if ($rc4 == false) {
echo " Exec Returned FALSE ";
echo " Error = ".ora_error($cur);
echo " ";
echo "ErrorCode = ".ora_errorcode($cur);
echo "Error Executing";
ora_close ($cur);
The Oracle procedure has a select count from a table and it returns the number of records in that table. It's defined as:
CREATE OR REPLACE procedure p_ins_gsdata2 (
p_requestid IN varchar2 default null,
p_retcode OUT varchar2)
as
BEGIN
SELECT COUNT (*) INTO p_retcode
FROM S_GSMRY_DATA_SURVEY
WHERE request_id = p_requestid ;
COMMIT;
RETURN;
END;
Nothing much there. I want to do an insert into a table,
from the procedure later, but I figured that I start with a select count since it's simpler.
When I ran the Php code, I get the following:
144937
Parse was successful
Requestid Bind Successful
Returnval Bind Successful
Result = 0
Exec Returned FALSE
Error = ORA-00000: normal, successful completion -- while
processing OCI function OBNDRA
ErrorCode = 0
Error Executing
I listed the messages on separate lines for clarity. I don't understand why it parses and binds o.k. but the exec returns false.
Thanks again in advance for your help. Have a great day.
Regards,
Rudiretcode=`echo $?`is a bit convoluted. Just use:
retcode=$?I see no EOF line terminating your input. Your flavour of Unix might not like that - it might ignore the command, though I'd be surprised (AIX doesn't).
replace the EXEC line with :
select 'hello' from dual;
and see if you get some output - then you know if sqlplus commands are being called from your script. You didn't mentioned whether you see the banner for sqlplus. Copy/paste the output that you get, it will give us much more of an idea. -
OCI 22303 exception - Pass object to type Record in oracle procedure
Recently i had my first encounter with ODP.NET and Oracle. I'm developing a a datalayer that can access a stored procedure on an Oracle database.
The problem i'm having is the following:
I'm using this method to pass my parameters to the procedure: http://www.codeproject.com/KB/cs/CustomObject_Oracle.aspx
I have also attempted this approach:
http://developergeeks.com/article/48/3-steps-to-implement-oracle-udt-in-odpnet
I always get the message (litteraly):
Oracle.DataAccess.Client.OracleException: OCI-22303: type "e;PAC$WEBSHOP_PROCS"."CUSTOMER_IN_RECTYPE" not found.
It sounds weird to me, but what are the "es doing here in the error message I see?
Some code i use:
OracleParameter objParam = new OracleParameter
OracleDbType = OracleDbType.Object,
Direction = ParameterDirection.Input,
ParameterName = "PAC$WEBSHOP_PROCS.P_CUSTOMER_IN",
UdtTypeName = "PAC$WEBSHOP_PROCS.WEBSHOP_PROCS.CUSTOMER_IN_RECTYPE",
Value = card
The information i have about the Oracle procedure:
CREATE OR REPLACE PACKAGE PAC$WEBSHOP_PROCS IS
TYPE CUSTOMER_IN_RECTYPE IS RECORD
(CUS_STO_IDENTIFIER NUMBER(2)
,CUS_IDENTIFIER NUMBER(6)
,CH_IDENTIFIER NUMBER(2)
,CH_CARD_VERSION NUMBER(1)
PROCEDURE PRC$WS_VALIDATE_CARD
(P_CUSTOMER_IN IN PAC$WEBSHOP_PROCS.CUSTOMER_IN_RECTYPE
,P_RETURN_CODE IN OUT NUMBER
Any help to cover my problem would be greatly appreciated.
Thx
Edited by: 836497 on 14-feb-2011 4:36The only way to call it as is would be via an anonymous plsql block, where you create the record type inside the block. Interacting with the block via ODP would be limited to scalar values.
Here's a PLSQL example just to demonstrate. Here, v1 and v2 are bind variables of scalar type, which you'd setup/bind via ODP instead of the SQL prompt as I did, but I thought this might keep things simpler for the example.
The other choice would be to write a wrapper procedure that takes type OBJECT that you can call from ODP, and inside that procedure convert them to/from RECORD and call the original procedure.
Hope it helps,
Greg
SQL> drop package somepack;
Package dropped.
SQL> create package somepack as
2 type somerectype is record(n1 number);
3 function somefunc (v1 somerectype) return somerectype;
4 end;
5 /
Package created.
SQL>
SQL> create package body somepack as
2 function somefunc (v1 somerectype) return somerectype is
3 begin
4 return v1;
5 end;
6 end;
7 /
Package body created.
SQL>
SQL>
SQL> var v1 number;
SQL> exec :v1 := 5;
PL/SQL procedure successfully completed.
SQL> var v2 number;
SQL>
SQL>
SQL> declare
2 localvar1 somepack.somerectype;
3 localvar2 somepack.somerectype;
4 begin
5 localvar1.n1 := :v1;
6 localvar2 := somepack.somefunc(localvar1);
7 :v2 := localvar2.n1;
8 end;
9 /
PL/SQL procedure successfully completed.
SQL> print v2;
V2
5
SQL> -
Sending mail from oracle procedure
Hi Experts,
I want to send mail from oracle Procedure. Anybody please help me out.
Thanks.BEGIN
UTL_MAIL.send(sender => '[email protected]',
recipients => '[email protected],[email protected]',
cc => '[email protected]',
bcc => '[email protected]',
subject => 'UTL_MAIL Test',
message => 'If you get this message it worked!');END; -
Convert php script to oracle procedure
To all please help me... I wanna convert php script to oracle procedure..and the script is (exp)..
<?php
include("../config/koneksi.php");
$customer=$_POST['customer'];
$tanggal1=$_POST['theDate1'];
$tanggal2=$_POST['theDate2'];
$no_bulan=substr($tanggal1,0,2);
$bulan_sajah= (substr($no_bulan,0,1)=='0')? substr($no_bulan,1,1) : $no_bulan;
$tahun_sajah=substr($tanggal1,3,4);
$blnkmrn=(int)$bulan_sajah;
$thnkmrn=(int)$tahun_sajah;
if ($blnkmrn==1) {
$bulan_lalu=12;
$tahun_lalu=$thnkmrn-1;}
else {
$bulan_lalu=$blnkmrn-1;
$tahun_lalu=$thnkmrn;
$bulanlalu=strval($bulan_lalu);
$tahunlalu=strval($tahun_lalu);
$sql = "select nip_nas from edo_customer_master_dives where standard_name='$customer'";
$stm = ociparse($conn,$sql);
ociexecute($stm);
ocifetch($stm);
$data=ociresult($stm,1);
$sql12 = "select PRODUCT_LINE_ID,sum(REVENUE)
from PA_FACT_REV_BILLED_CC
where nip_nas='$data' and year_id='$tahun_sajah' and month_id='$bulan_sajah' group by PRODUCT_LINE_ID";
$stm12 = ociparse($conn,$sql12);
ociexecute($stm12);
$total_revenue=0;
$i="0";
while (ocifetch($stm12)){
$rev_items=ociresult($stm12,1);
$revenue=ociresult($stm12,2);
$sql2 = "select * from PA_FACT_REV_BILLED_CC
where nip_nas='$data' and PRODUCT_LINE_ID='$rev_items'";
$stm2 = ociparse($conn,$sql2);
ociexecute($stm2);
ocifetch($stm2);
$tahun=ociresult($stm2,1);
$bulan=ociresult($stm2,2);
$nipnas=ociresult($stm2,3);
$prod_line=ociresult($stm2,4);
$rev_item=ociresult($stm2,5);
//$revenue=ociresult($stm2,6);
$query1 = "select standard_name from edo_customer_master_dives where nip_nas='$nipnas'";
$st1 = ociparse($conn,$query1);
ociexecute($st1);
ocifetch($st1);
$nama_cust=ociresult($st1,1);
$query2 = "select prod_line_lname from parameter.p_prod_line@dwhnas where prod_line_id='$prod_line'";
$st2 = ociparse($conn,$query2);
ociexecute($st2);
ocifetch($st2);
$nama_prod_line=ociresult($st2,1);
$query3 = "select REV_TYPE_LNAME from parameter.p_rev_type@dwhnas where REV_TYPE_ID='$rev_item'";
$st3 = ociparse($conn,$query3);
ociexecute($st3);
ocifetch($st3);
$nama_rev_item=ociresult($st3,1);
$query4="select sum(total_usage) from PA_FACT_TRAFFIC_CC where PRODUCT_LINE_ID='$prod_line' and nip_nas='$nipnas' and year_id='$tahun_sajah' and month_id='$bulan_sajah' group by PRODUCT_LINE_ID";
$st4 = ociparse($conn,$query4);
ociexecute($st4);
ocifetch($st4);
$total_usage=ociresult($st4,1);
$total=$revenue + $total_usage;
echo $tahun." ".$bulan." ".$nama_cust." ".$nama_prod_line." ".$nama_rev_item." ".$revenue." ".$total_usage." ".$total."<br>";
$total_revenue=$total_revenue+$total;
$i++;
echo $total_revenue;
//cost of product
$query5="select * from PA_FACT_TRAFFIC_CC where nip_nas='$nipnas' and year_id='$tahunlalu' and month_id='$bulanlalu'";
$st5 = ociparse($conn,$query5);
ociexecute($st5);
$total1=0;
$total2=0;
$total3=0;
$total4=0;
$total5=0;
while (ocifetch($st5)){
$nipnas=ociresult($st5,3);
$lineid=ociresult($st5,4);
$itemid=ociresult($st5,5);
$call=ociresult($st5,6);
$unit=ociresult($st5,7);
$query6 = "select prod_line_lname from parameter.p_prod_line@dwhnas where prod_line_id='$lineid'";
$st6 = ociparse($conn,$query6);
ociexecute($st6);
ocifetch($st6);
$nama_prod_line=ociresult($st6,1);
$query7 = "select REV_item_LNAME from parameter.p_rev_item@dwhnas where REV_item_ID='$itemid'";
$st7 = ociparse($conn,$query7);
ociexecute($st7);
ocifetch($st7);
$nama_rev_item=ociresult($st7,1);
$query8 = "select * from cost_of_product where prod_line_lname='$nama_prod_line' and REV_item_LNAME='$nama_rev_item' and end_date is null";
$st8 = ociparse($conn,$query8);
ociexecute($st8);
ocifetch($st8);
$lineid_cost=ociresult($st8,1);
$itemid_cost=ociresult($st8,2);
$satuan=ociresult($st8,5);
$nilai=ociresult($st8,7);
if (strtoupper($satuan)=='MENIT') $total1=$total1+(($unit/60)*$nilai);
if (strtoupper($satuan)=='KBPS') $total2=$total2+($unit*$nilai);
if (strtoupper($satuan)=='SMS') $total3=$total3+($call*$nilai);
if (strtoupper($satuan)=='SSL') $total4=$total4+($call*$nilai);
if (strtoupper($satuan)=='SST') $total5=$total5+($call*$nilai);
$total_cost_pots=$total1+$total2+$total3+$total4+$total5;
echo $total_cost_pots;
?>
this script just for exp.Please convert step by step. for example
(1) remove inverted quotation mark ( ` )
(2) modify constraints syntax (PRIMARY KEY,UNIQUE KEY, KEY etc.) to [url http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/clauses002.htm#g1053592]Oracle constraints.
(3) modify some datatype to [url http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/sql_elements001.htm#i45441]Oracle datatype
(4) think how to convert auto_increment ([url http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_6015.htm#i2067093]Sequence, [url http://download-west.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_7004.htm#i2235611]Beffore Trigger etc. on Oracle)
http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_packages.htm#sthref864
http://download-west.oracle.com/docs/cd/B19306_01/appdev.102/b14261/toc.htm -
- I have a Product list box (asp.net) used as multiple selected values for a parameter.
- The Product ID is defined in the Oracle procedure as NUMBER data type.
- In my crystal report, I have a parameter field allow multiple values as p_product_id type as Number. This is the code in my Record Selection Formula for the report:
({?p_product_id}[1] = -1 OR {Procedure_name.product_id} in {p_product_id})
- In C#, this is my code
List<decimal?> productUnit = new List<decimal?>();
int counter = 0;
decimal prod;
for (int i = 0; i < lstProducts.Items.Count; i++)
if (lstProducts.Items[i].Selected)
if (decimal.TryParse(lstProduct.Items[i].Value, out prod))
productUnit.Add((decimal?)prod);
counter++;
if (counter == 0)
productUnit.Add(-1);
ReportingDAO rDataFactory = new ReportingDAO();
retVal = rDataFactory.GetProductReport(productUnit);
public CrystalDecisions.CrystalReports.Engine.ReportDocument GetProductReport(List<decimal?> productUnit)
CrystalDecisions.CrystalReports.Engine.ReportDocument retVal = new rptProductDownload();
ReportLogon rptLog = new ReportLogon();
rptLog.Logon(retVal, "RPT_PRODUCT_DOWNLOAD");
retVal.SetParameterValue("p_product_id", productUnit);
I keep having the "Value does not fall within the expected range" when I debug. My question is, is the data type I used for procedure/Crystal report/ and C# correct ? I always have problem with the data type. Any help would be
appreciated
Thank youHi progGirl,
Thank you for your post, but Microsoft doesn't provide support for CrystalReport now. Please post your question in SAP official site here:
http://forums.sdn.sap.com/forum.jspa?forumID=313
Thank you for your understanding.
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey. -
Problem in XML Parsing via oracle procedure...
Hi,
I wrote one oracle procedure for xml parsing.
I have one valid xml file which has "encode UTF-8". The XML file contains some comments also. While we are parsing the xml file at that time it is not parse successfully and also it is not giving any error. After the following line it is skip rest of the codes(lines).
dbms_xmlparser.parseclob(l_parser, l_clob);
At the end of the xml file there are some comments which is like "<!-- abc --> ".
When I am changing the "encode UTF-8 to ISO-88596-1" & removing the comments which wrote on bottom of the file then its working fine, but the files which we are getting from the system is contains the encode UTF-8 and we don't want to preprocess on that xml files. Even if we will do that via shell script or perl script then it will be overhead to the system and in a single stroke our system will parse more than 5k xml files, so if we will do some preprocess on it, it will take some more time approx 1-2 minutes extra.
So, If someone knows any solution of this problem, then please guide & help me on this.
My xml file structure is as follows:-
<?xml version="1.0" encoding="UTF-8"?>
<mcd xmlns:HTML="http://www.w3.org/TR/REC-xml">
<child>
<child1>32.401 V5.5</child1>
<child2>ZoneGate</child2>
</child>
<mc>
<newid>
<id>12</id>
</newid>
<mindex>
<date>20111102180000</date>
<mt>abc1</mt>
<mt>abc2</mt>
<mvalue>
<r>val_1</r>
<r>val_2</r>
</mvalue>
</mindex>
</mc>
</mcd>
<!--
ALARM STATUS
morning 10
afternoon 14
evening 18
night 22
-->
<!--
PARAM:EID = 1
PARAM:GId = 3
PARAM:GSId = 0
--!>
And my oracle procedure is as follows:-
create or replace procedure loadXMLtotable(dir_name IN varchar2, xmlfile IN varchar2) AS
-- Defining the variables
ecode NUMBER;
emesg VARCHAR2(200);
l_bfile BFILE;
l_clob CLOB;
l_dest_offset INTEGER:=1;
l_src_offset INTEGER:=1;
l_Char_set_id NUMBER := NLS_CHARSET_ID('UTF8');
l_lang_context INTEGER := dbms_lob.default_lang_ctx;
l_warning INTEGER;
l_parser dbms_xmlparser.Parser;
l_doc dbms_xmldom.DOMDocument;
l_nl1 dbms_xmldom.DOMNodeList;
l_nl2 dbms_xmldom.DOMNodeList;
l_n dbms_xmldom.DOMNode;
node1 dbms_xmldom.DOMNode;
colid integer ; -- column id used for identifying which column it belongs.
l_xmltype XMLTYPE;
sub_xmltype XMLTYPE;
num_nodes number;
l_index PLS_INTEGER;
l_subIndex PLS_INTEGER;
starttime Date;
temp_datatime VARCHAR(25);
columnname varchar2(300);
columnvalue varchar2(300);
-- creating a Type which is a type of "test_hem" table RowType, which I created in SVN server
TYPE tab_type IS TABLE OF test_hem%ROWTYPE;
t_tab tab_type := tab_type();
BEGIN
-- Passing the xmlfile and virtual directory name which we gave at the time of directory creation
l_bfile := BFileName('MY_FILES', xmlfile);
dbms_lob.createtemporary(l_clob, cache=>FALSE);
dbms_lob.open(l_bfile, dbms_lob.lob_readonly);
--dbms_lob.loadFromFile(dest_lob => l_clob,
-- src_lob => l_bfile,
-- amount => dbms_lob.getLength(l_bfile));
dbms_lob.loadclobfromfile(l_clob, l_bfile, dbms_lob.getlength(l_bfile),
l_dest_offset, l_src_offset, l_Char_set_id, l_lang_context, l_warning);
dbms_lob.close(l_bfile);
-- make sure implicit date conversions are performed correctly
dbms_session.set_nls('NLS_DATE_FORMAT','''YYYY-MON-DD HH24:MI:SS''');
dbms_output.put_line('Date format set');
-- Create a parser.
l_parser := dbms_xmlparser.newParser;
dbms_output.put_line('output 1');
-- Parse the document and create a new DOM document.
dbms_xmlparser.parseclob(l_parser, l_clob);
dbms_output.put_line(' passed parsing');
l_doc := dbms_xmlparser.getDocument(l_parser);
dbms_output.put_line(' passed getdocument');
-- Free resources associated with the CLOB and Parser now they are no longer needed.
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
-- Get a list of all the EMP nodes in the document using the XPATH syntax.
l_nl1 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'//mcd/child');
-- Loop through the list and create a new record in a tble collection
FOR cur_sel IN 0 .. dbms_xmldom.getLength(l_nl1) - 1 LOOP
l_n := dbms_xmldom.item(l_nl1, cur_sel);
t_tab.extend;
-- Use XPATH syntax to assign values to he elements of the collection.
dbms_xslprocessor.valueOf(l_n,'child1/text()',t_tab(t_tab.last).country);
-- putting the state and vendorname into the table rowtype
dbms_xslprocessor.valueOf(l_n,'child2/text()',t_tab(t_tab.last).state);
END LOOP;
-- getting the version and putting into the table rowtype
l_n := dbms_xslprocessor.selectSingleNode(dbms_xmldom.makeNode(l_doc),'//mcd/mc/newid/id');
dbms_xslprocessor.valueOf(l_n,'id/text()',t_tab(t_tab.last).id);
-- selecting the nodes whose starting tag is "mindex"
l_nl1 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'//mcd/mc/mindex');
-- checking the total number of nodes whose starting through "mi"
num_nodes := dbms_xmldom.getLength(l_nl1);
l_index := 1;
-- For loop to iterate the nodes.
FOR cur_sel IN 0 .. dbms_xmldom.getLength(l_nl1) - 1 LOOP
-- whole current node is selected and storing into the node1 variable
node1 := dbms_xmldom.item(l_nl1, cur_sel);
-- setting the xmltype as AL32UTF8
l_xmltype := xmltype(l_bfile, nls_charset_id('AL32UTF8'));
-- if selecting parent node containing the mt child node then only proceed else skip that parent node.
IF (l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mt') > 0 and l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mvalue/r') > 0) Then
-- fetch the datatime, convert it into to_date format and store it into table rowtype
temp_datatime := dbms_xslprocessor.valueOf(node1, 'date/text()');
t_tab(t_tab.last).data_time := to_char(to_date(temp_datatime, 'YYYYMmcDHH24MISS'));
l_subIndex := 1;
while (l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mt[' || l_subIndex || ']') > 0 and l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mvalue/r['|| l_subIndex || ']') > 0 ) LOOP
-- getting mt and corresponging mvalue/r values
dbms_xslprocessor.valueOf(node1,'mt[' || l_subIndex || ']/text()',columnname);
dbms_xslprocessor.valueOf(node1,'mvalue/r[' || l_subIndex || ']/text()',columnvalue);
l_subIndex := l_subIndex + 1;
-- getting the column to which this mapping belongs.
select columnid into colid from abc_table where columnname=name;
CASE colid
WHEN 1 THEN t_tab(t_tab.last).col1 := columnvalue;
WHEN 2 THEN t_tab(t_tab.last).col2 := columnvalue;
WHEN 3 THEN t_tab(t_tab.last).col3 := columnvalue;
ELSE dbms_output.put_line('No column mapping for counter ' || columnname) ;
END CASE; -- end of case statement.
END LOOP;
-- Insert data into the real table from the table collection.
FORALL i IN t_tab.first .. t_tab.last
INSERT INTO test_hem VALUES t_tab(i);
END IF;
l_index := l_index + 1;
COMMIT;
END LOOP;
commit;
EXCEPTION
WHEN OTHERS THEN
ecode := SQLCODE;
emesg := SQLERRM;
dbms_output.put_line(TO_CHAR(ecode) || '-' || emesg);
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
dbms_xmldom.freeDocument(l_doc);
END;Sorry Odie,
I am new to this site as well as PL/SQL. I am giving additional details which you had mentioned in your last comments.
our Oracle Database version is "10.2.0.4.0"
The structure of target table Instrument_Details is as follows:
Create table Instrument_Details (
instrument_id Integer Primary Key,
provider_name Varchar2(32),
version_number Varchar2(32),
location_id Integer,
installation_date Date,
granularity Integer,
time_out Integer );
Note:- Here test_hem is alias of Instrument_details.
Here instrument_id is a primary key.
provider_name contains the child2 xml tag value.
version_number contains the child1 xml tag value.
location_id contains the newid/id value which is map to other table which fetching the location name corresponding to the location_id.
installation_date contains the date xml tag value.
Now we have created one mapping tables where we mapped the xml tag values "mt" with table column name means "abc1 = granularity", "abc2 = time_out" in that table.
these table column value are written under mvalue xml tag.
_Our Database Character set is_:-
NLS_CHARACTERSET WE8ISO8859P1
Now as you suggest me to format your code. I am writing the xml code and procedure code again.
My xml file structure is as follows:-
<?xml version="1.0" encoding="UTF-8"?>
<mcd xmlns:HTML="http://www.w3.org/TR/REC-xml">
<child>
<child1>32.401 V5.5</child1>
<child2>ZoneGate</child2>
</child>
<mc>
<newid>
<id>12</id>
</newid>
<mindex>
<date>20111102180000</date>
<mt>abc1</mt>
<mt>abc2</mt>
<mvalue>
<r>val_1</r> -- here val_1 and val_2 are numeric values
<r>val_2</r>
</mvalue>
</mindex>
</mc>
</mcd>
<!--
ALARM STATUS
morning 10
afternoon 14
evening 18
night 22
-->
<!--
PARAM:EID = 1
PARAM:GId = 3
PARAM:GSId = 0
--!> And my oracle procedure is as follows:-
create or replace procedure loadXMLtotable(dir_name IN varchar2, xmlfile IN varchar2) AS
-- Defining the variables
ecode NUMBER;
emesg VARCHAR2(200);
l_bfile BFILE;
l_clob CLOB;
l_dest_offset INTEGER:=1;
l_src_offset INTEGER:=1;
l_Char_set_id NUMBER := NLS_CHARSET_ID('UTF8');
l_lang_context INTEGER := dbms_lob.default_lang_ctx;
l_warning INTEGER;
l_parser dbms_xmlparser.Parser;
l_doc dbms_xmldom.DOMDocument;
l_nl1 dbms_xmldom.DOMNodeList;
l_nl2 dbms_xmldom.DOMNodeList;
l_n dbms_xmldom.DOMNode;
node1 dbms_xmldom.DOMNode;
colid integer ; -- column id used for identifying which column it belongs.
l_xmltype XMLTYPE;
sub_xmltype XMLTYPE;
num_nodes number;
l_index PLS_INTEGER;
l_subIndex PLS_INTEGER;
starttime Date;
temp_datatime VARCHAR(25);
columnname varchar2(300);
columnvalue varchar2(300);
-- creating a Type which is a type of "Instrument_Details" table RowType, which I created in SVN server
TYPE tab_type IS TABLE OF Instrument_Details%ROWTYPE;
t_tab tab_type := tab_type();
BEGIN
-- Passing the xmlfile and virtual directory name which we gave at the time of directory creation
l_bfile := BFileName('MY_FILES', xmlfile);
dbms_lob.createtemporary(l_clob, cache=>FALSE);
dbms_lob.open(l_bfile, dbms_lob.lob_readonly);
--dbms_lob.loadFromFile(dest_lob => l_clob,
-- src_lob => l_bfile,
-- amount => dbms_lob.getLength(l_bfile));
dbms_lob.loadclobfromfile(l_clob, l_bfile, dbms_lob.getlength(l_bfile),
l_dest_offset, l_src_offset, l_Char_set_id, l_lang_context, l_warning);
dbms_lob.close(l_bfile);
-- make sure implicit date conversions are performed correctly
dbms_session.set_nls('NLS_DATE_FORMAT','''YYYY-MON-DD HH24:MI:SS''');
dbms_output.put_line('Date format set');
-- Create a parser.
l_parser := dbms_xmlparser.newParser;
dbms_output.put_line('output 1');
-- Parse the document and create a new DOM document.
dbms_xmlparser.parseclob(l_parser, l_clob);
*-- Below lines are skipping....*
dbms_output.put_line(' passed parsing');
l_doc := dbms_xmlparser.getDocument(l_parser);
dbms_output.put_line(' passed getdocument');
-- Free resources associated with the CLOB and Parser now they are no longer needed.
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
-- Get a list of all the EMP nodes in the document using the XPATH syntax.
l_nl1 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'//mcd/child');
-- Loop through the list and create a new record in a tble collection
FOR cur_sel IN 0 .. dbms_xmldom.getLength(l_nl1) - 1 LOOP
l_n := dbms_xmldom.item(l_nl1, cur_sel);
t_tab.extend;
-- Use XPATH syntax to assign values to he elements of the collection.
dbms_xslprocessor.valueOf(l_n,'child1/text()',t_tab(t_tab.last).country);
-- putting the state and vendorname into the table rowtype
dbms_xslprocessor.valueOf(l_n,'child2/text()',t_tab(t_tab.last).state);
END LOOP;
-- getting the version and putting into the table rowtype
l_n := dbms_xslprocessor.selectSingleNode(dbms_xmldom.makeNode(l_doc),'//mcd/mc/newid/id');
dbms_xslprocessor.valueOf(l_n,'id/text()',t_tab(t_tab.last).id);
-- selecting the nodes whose starting tag is "mindex"
l_nl1 := dbms_xslprocessor.selectNodes(dbms_xmldom.makeNode(l_doc),'//mcd/mc/mindex');
-- checking the total number of nodes whose starting through "mi"
num_nodes := dbms_xmldom.getLength(l_nl1);
l_index := 1;
-- For loop to iterate the nodes.
FOR cur_sel IN 0 .. dbms_xmldom.getLength(l_nl1) - 1 LOOP
-- whole current node is selected and storing into the node1 variable
node1 := dbms_xmldom.item(l_nl1, cur_sel);
-- setting the xmltype as AL32UTF8
l_xmltype := xmltype(l_bfile, nls_charset_id('AL32UTF8'));
-- if selecting parent node containing the mt child node then only proceed else skip that parent node.
IF (l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mt') > 0 and l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mvalue/r') > 0) Then
-- fetch the datatime, convert it into to_date format and store it into table rowtype
temp_datatime := dbms_xslprocessor.valueOf(node1, 'date/text()');
t_tab(t_tab.last).data_time := to_char(to_date(temp_datatime, 'YYYYMmcDHH24MISS'));
l_subIndex := 1;
while (l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mt[' || l_subIndex || ']') > 0 and l_xmltype.Existsnode('//mcd/mc/mindex[' || l_index || ']/mvalue/r['|| l_subIndex || ']') > 0 ) LOOP
-- getting mt and corresponging mvalue/r values
dbms_xslprocessor.valueOf(node1,'mt[' || l_subIndex || ']/text()',columnname);
dbms_xslprocessor.valueOf(node1,'mvalue/r[' || l_subIndex || ']/text()',columnvalue);
l_subIndex := l_subIndex + 1;
-- getting the column to which this mapping belongs.
select columnid into colid from abc_table where columnname=name;
CASE colid
WHEN 1 THEN t_tab(t_tab.last).col1 := columnvalue;
WHEN 2 THEN t_tab(t_tab.last).col2 := columnvalue;
WHEN 3 THEN t_tab(t_tab.last).col3 := columnvalue;
ELSE dbms_output.put_line('No column mapping for counter ' || columnname) ;
END CASE; -- end of case statement.
END LOOP;
-- Insert data into the real table from the table collection.
FORALL i IN t_tab.first .. t_tab.last
INSERT INTO test_hem VALUES t_tab(i);
END IF;
l_index := l_index + 1;
COMMIT;
END LOOP;
commit;
EXCEPTION
WHEN OTHERS THEN
ecode := SQLCODE;
emesg := SQLERRM;
dbms_output.put_line(TO_CHAR(ecode) || '-' || emesg);
dbms_lob.freetemporary(l_clob);
dbms_xmlparser.freeParser(l_parser);
dbms_xmldom.freeDocument(l_doc);
END;Thanks in advance for your help...
Maybe you are looking for
-
I have had my iphone 4s for a long time, i recently purchaced a MacBookAir and set up an iCloud account thats diffent from the email i used on my phone i am unable to pair the two, i would like to use my new email i used on the mac and change the old
-
How to specify rasterID of RDT in SDO_GEOR.createBlank
Hi all, When issuing an SDO_GEOR.createBlank can we specify the rasterid in RDT just like when use SDO_GEOR.init we specify the rasterid in RDT (instead of letting the db decides it)? many thanks in advance =Damon
-
Siebel On Demand Outbound Webservice integration using bpel question
Hello everyone, I have a question I am hoping the forum can help me out with I am trying to do an integration using bpel with Siebel on demand as the begining point. The bussiness case is that I want qualified leads to be extracted out of the Siebel
-
Hi. I add a node to the default tree model and an event gets fired back to the listener (in this case the JTree itself). I then expand the path so as to show the new node to the user. A gap appears between the new node and the node in another branch
-
Indexing A External Drive I no longer Have
i had a friends mac connected as a ext drive. she took it home. but my spotlight is still indexing the drive which of course not connected anymore. how do i stop this? is there a easy way? or do i have to go into the dreaded "terminal" thanks for you