How to handle Database's trigger
Greetings,
i have an application on JDeveloper 11.1.2.4.0. At some point the user add new customer and its been saved to the database.
Because the application may be used in more than 1 shop, i have created a 2nd database, only for biography uses and history,
so it can be view by all shops. What i did is, when a new record is inserted into application's biography table, i also have a trigger
that after the row is inserted, i also insert the new row into my 2nd database. In both databases a primary key exists to avoid duplicated id's.
I was hoping instead of handling duplicated records on trigger, the database will handle it (if duplicated records exists, just dont save it at all),
but my problem now is, its throw me a proper exception
ORA-00001: unique constraint (PERSONAL_RECORD.BIOGR_PK) violated ORA-06512: at "ELAB.SAVE_BIOGR", line 11 ORA-04088: error during execution of trigger 'ELAB.SAVE_BIOGR' ORA-06512: at line 1
AND it does not save the biogr on the 1st database either. I do not understand what the trigger have to do with the first database since its after insert row method and not before.
It should insert the record into the database, then fire the trigger, throw an exception and dont save the record in 2nd database. But instead the record its been saved nowhere..
The case is: user fields some text boxes for a new customer, i check if the id is already exists in the 2nd database, and i notify the user that this new customer already exists in
the personal record database (2nd database, 1 common database for all shops), and i ask the user if he/she wants to synchronize or use the current fields. If synchronize, i take the record
from the 2nd database and insert them into the 1st. If not, i insert them into the 1st database, and thats when the trigger should handle the duplicate row exception, not my application.
Is there a way i can temporally turn off database trigger from my adf application or i can handle the exception BUT the record be save on the 1st database? because if the exception its been
thrown, the new record its gone.
thanks in advance for any help.
True, since i can't handle the trigger procedure, i add an exception inside of it. So it will do something when the exception occurs BUT it will save the customer
in 1st database. Here is my trigger code:
create or replace TRIGGER SAVE_BIOGR
AFTER INSERT
ON ELAB.BIOGR
FOR EACH ROW
DECLARE
v_username varchar2(10);
BEGIN
SELECT user INTO v_username
FROM dual;
INSERT INTO PERSONAL_RECORD.BIOGR
( ID,
NAME,
SNAME,
USERNAME )
VALUES
( :NEW.ID_PATIENTS,
:NEW.NAME,
:NEW.SNAME,
v_username);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
UPDATE PERSONAL_RECORD.BIOGR SET ERROR = 'ALREADY EXIST';
END;
I add update on exception because leaving it blank or with comment in THEN section it gave me an error i dont know why. So i just
include a dump update procedure.
Similar Messages
-
How to handle format trigger in bi publisher report
Hi all,
anyone have idea how to handle format trigger in bi publisher report....
also if someone will illustrate the how exactly we use the triggers in bi publisher reports.
regards
RatneshHi,
there's no direct support for the format triggers out of Oracle Reports. Therefore they are mentioned in the log file and in the created layout after conversion the objects with format triggers are colored red to show, that there you had to do some additional work.
Currently you had to built the logic of format triggers in BI Publisher new. Hve a look in the User Guide, there are some examples for if or choose statements.
regards
Rainer -
How to handle DDL in remote database
Hi our db running on 10g. How to handle DDL's on the remote database? My requirement is as a object migration, how to migrate object/s from database A to database B through user. Say i have table call my_table in database A I want to create/replace this table on database B as a database user. Is there a way can be done? Database link or streams or any other method?
Thanks in advance,
-BYou have many options to do this, just to name a few
use COPY command of SQLPLUS
SQL> copy from scott/tiger@DB_A
to scott/tiger@DB_B
create new_emp using select * from emp;create database link to database A in database B, run this from database B
create new_emp as select * from emp@dblinkDB_A;or export/import
etc. -
How to handle the trigger sequence
I really do not have any idea for this question.
the trigger need to implement:
An employee can not work on more than 2 projects supervised by any given department.
DEPARTMENT (dname, dnumber, mgrssn, mgrstartdate) KEY: dnumber.
PROJECT (pname, pnumber, plocation, dnum) KEY: pnumber.
CREATE TABLE WORKS_ON
( ESSN VARCHAR2(9) NOT NULL,
PNO NUMBER NOT NULL,
HOURS NUMBER(3,1) NOT NULL,
PRIMARY KEY (ESSN, PNO));
DESC WORKS_ON;
INSERT INTO WORKS_ON VALUES
('123456789',1,32.5);
INSERT INTO WORKS_ON VALUES
('123456789',2 ,7.5);
INSERT INTO WORKS_ON VALUES
('666884444',3 ,40.0);
INSERT INTO WORKS_ON VALUES
('453453453',1 ,20.0);
INSERT INTO WORKS_ON VALUES
('453453453',2,20.0);
CREATE TABLE PROJECT
(PNAME VARCHAR2(15) NOT NULL,
PNUMBER NUMBER NOT NULL,
PLOCATION VARCHAR2(15),
DNUM NUMBER NOT NULL,
PRIMARY KEY (PNUMBER), UNIQUE(PNAME));
DESC PROJECT;
INSERT INTO PROJECT VALUES(
'ProjectX',1, 'Bellaire',5);
INSERT INTO PROJECT VALUES(
'ProjectY',2, 'Sugarland',5);
INSERT INTO PROJECT VALUES(
'ProjectZ',3,'Houston',5);
INSERT INTO PROJECT VALUES(
'Computerization',10,'Stafford',4);i create package and two trigger like following in order to avoid mutating table.
PACKAGE "HW4AIDB" AS
TYPE EmploadY IS RECORD(
Empessn varchar2(9),
Empprojectcount number,
Empdepartcount number
TYPE EmploadarrayY is table of EmploadY
index by BINARY_INTEGER;
Empload EmploadarrayY;
Emploadsize number;
END;
create or replace
TRIGGER TPROJECTA AFTER INSERT OR UPDATE OR DELETE ON WORKS_ON
DECLARE
i number:=0;
BEGIN
HW4AIDB.Emploadsize :=0;
for m in (select w.essn empessn,
count(w.pno) empprojectcount, count(distinct p.dnum) empdepartcount
from works_on w, project p
where w.pno=p.pnumber
group by w.essn)loop
i :=i+1;
HW4AIDB.Empload(i).Empessn := m.empessn;
HW4AIDB.Empload(i).Empprojectcount := m.empprojectcount;
HW4AIDB.Empload(i).Empdepartcount := m.empdepartcount;
dbms_output.PUT_LINE('TPROJECTA '||' '||m.empessn||' '||m.empprojectcount||
' '||m.empdepartcount);
end loop;
HW4AIDB.Emploadsize :=i;
dbms_output.PUT_LINE('==================================');
END;TRIGGER TSALARYB BEFORE INSERT OR UPDATE OR DELETE ON EMPLOYEE
FOR EACH ROW
DECLARE
w HW4AID.EmploadX;
i number;
mypos number;
BEGIN
mypos :=-1;
for i in 1..HW4AID.Emploadsize loop
if(:new.ssn = HW4AID.Empload(i).Empssn) then
w.Empmgrsalary := HW4AID.Empload(i).Empmgrsalary;
w.Empsalary := HW4AID.Empload(i).Empsalary;
mypos :=i;
exit;
end if;
end loop;
i :=mypos;
dbms_output.put_line('NEW '||:new.ssn||'-'||:new.salary);
if updating then
dbms_output.put_line('updating......');
if(:new.salary > w.Empmgrsalary) then
raise_application_error(-20005,'the salary is higher than that of department manager');
end if;
dbms_output.PUT_LINE('update done');
end if;
END;
i defined two trigger for AFTER, trigger run orders are acorrding to. before statement level, before row-level, after row level and after statement level.
so my trigger actually can not implement requirement. how to handle it. now i try to use this rule: select w.essn, w.pno,p.pnumber, p.dnum from works_on w, project p where w.pno=p.pnumber; in statement level trigger. howerver in row-level trigger i can not get value i need(p.dnum i can not get its count). if you guy have any other ideas, pls give me some advise. my brain is really run out of.
Thanks for your help!!!I would recommend creating a package/procedure that is the only way to insert a user into the works_on table. Then inside this procedure you need to serialize access to the works_on table by using a select for update. Then you can count the number of projects and ensure that the new works on is valid.
If you try to use triggers then due to Oracle's mutli-versioning, if two users insert the same data at the same time, the data integrity will be violated.
You will obviously have an employee table. I have created one here as follows:
create table employee (essn varchar2(9) primary key);
insert into employee values ('999999999');
Then you can use this table to serialize access to the works_on table by issuing a select for update against it. If you don't do this then two users executing the procedure at the same time will violate the constraint. It is important that you understand this and try it out with multiple sessions so that you understand it.
create or replace procedure insert_works_on
(p_essn varchar2, p_pno number, p_hours number)
as
l_essn varchar2(9);
l_count number;
begin
select essn
into l_essn
from employee
where essn = p_essn
for update;
select count(*)
into l_count
from works_on w
join project p on p.pnumber = w.pno
where w.essn = p_essn
and p.dnum = (select dnum
from project
where pnumber = p_pno);
if l_count < 2
then
insert into works_on values (p_essn, p_pno, p_hours);
else
dbms_output.put_line('Employee works on more than 1 project for dept');
end if;
end;
Then you can try it out:
begin
insert_works_on('999999999',1, 10);
end;
commit;
begin
insert_works_on('999999999',2, 20);
end;
commit;
begin
insert_works_on('999999999',3, 30);
end;
commit;
The first two will succeed and the last will fail. Try it out in multiple session as well to ensure it works for a multi-user scenario. -
How to handle multiple records in BPMN process
Hi All,
We are using Oracle BPM 11g.In my requirement,I am using the database adapter to get the data from table and I need to validate the each record and update the status of that record from the BPM Process.But I dont know how to handle if multiple records come at a time.Can anybody please helpout from this problem.
Thanks in advanced.
Narasimha Rao.Can you have a look at this post: http://redstack.wordpress.com/2010/09/30/iteratingtraversing-arrays-in-bpm/
It's solving a different problem, but the key is that it's using a multi-instance subprocess to iterate over an array of "things" that need to be acted in. In your case it's the set of results from the db query rather than the set of tests in the example. But the principle is the same. You'd take collection of rows from the DB and process them in a multi-instance subprocess. The text that begins with the following would be good place to start:
"Now let’s implement the body of our process. We will use the Subprocess object to handle the traversal of the array of tests. Drag a Subprocess from the component palette on the right into the process and drop it on the line between the Start and End nodes."
In the loop characteristics you'd define whether you want to execute serially or in parallel. -
How to handle special characters in NWDI
Dear All
I am trying to update the Description from JSP form. Through JCO we are calling the RFC of ABAP. We are passing these description from Java to RFC of ABAP and this RFC update the text in Database.
We have noticed that if there is some special character in description like as : or , complete description is not getting updated in to the SAP database.
Can anyone help me how to handle these special characters in Java. There may be N number of special characters. We want to generalize it. We want to replace these characters by s and z respectively.
For example : We want to update this description.
APPLERR H'4301 H'FA03 H'254C na Zagreb TC4 rijeen je cleaning procedurom, te je i kroz CSR odgovoreno da trap korekcija N01TCADG-0052 u bloku UPDC vie nije potrebna, te se moe izbaciti (AP143).
Uspjeno su zavrene HR17/CN-A3 FOA-e na tranzitnom nivou, te slijedi roll-out u dva termina 12/13.04 i 19/20.04. ETK je na sastanku isporučio SW, te ALEX i mini PLEX za sve objekte.
AP147. Poslati finalnu dokumentaciju za uvođenje paketa (implementacijsku instrukciju i sve popratne datoteke).
WHile updated text is as follows :
APPLERR H'4301 H'FA03 H'254C na Zagreb TC4 rije
N01TCADG-0052 u bloku UPDC vi
Uspje
sastanku isporu
AP147. Poslati finalnu dokumentaciju za uvo
Regards
BhavishyaHi Bhavishya,
Apparently your SAP database isn't configured to support Unicode. That would be the first solution to your problem, but I can imagine it's a bit drastic to convert your DB.
A second solution would be to encode the input description to ASCII before storing it in the database. When reading from the database, decode again to Unicode. This way, no information is lost. A suitable encoding would be Base64. e.g.
String description = "unday ebra";
String descriptionBase64 = new sun.misc.BASE64Encoder().encode(
description.getBytes("UTF-8")); // ""
// store descriptionBase64 in the DB
// later, when reading descriptionBase64 from the DB
String description2 = new String(
new sun.misc.BASE64Decoder().decodeBuffer(descriptionBase64), "UTF-8");
Instead of using Sun's implementation, a better alternative is to use the open source implementation
org.apache.commons.codec.binary.Base64 from Commons Codec .
The 3rd approach is indeed to normalize the description by replacing all special characters with their ASCII equivalent. A rather easy solution is as follows:
String description = "unday ebra";
String descriptionNormalized = sun.text.Normalizer.normalize(
description, sun.text.Normalizer.DECOMP, 0).replaceAll(
"[^p{ASCII}]", "");
sun.text.Normalizer decomposes the string, e.g. "éàî" becomes "e´a`i^", after which non-ASCII characters are being removed using a regular expression.Again, note that it's usually a bad idea to use sun.* packages, see note about sun.* packages. The above code only works with J2SE 1.4 and J2SE 5.0, but it breaks in J2SE 6.0 (where
java.text.Normalizer became part of the public API ;-). A good open source implementation can be found here: ICU4J (com.ibm.icu.text.Normalizer).
Kind regards,
/Sigiswald -
Please tell me how to handle list item in this concern
please tell me how to handle list item in this concern
My problem is:
i have a category table with column categoryname(varchar type)
I want to display the records of categoryname in a drop down list (i.e., list item )
So ..please tell me how to do it
Thanks in advance..This code is just a sample from the Help documentation. It won't work until you modify it for your form.
Why do you have "steps" in your code? You are suppose to do what the steps tell you. You don't place the steps in your code. The steps must be removed from your code.
Step 1 code goes in a program unit, not in a trigger.
Step 2 and 3 code usually goes in a trigger.
You will have to replace the names of the items and record group with your own names as you have defined them in your form.
step 1: create a procedure in your application
procedure load_list(itm in VARCHAR2, rg in VARCHAR2) is
group_id RecordGroup := Find_Group(rg);
list_id Item := Find_Item(itm);
Begin
if Populate_Group(group_id)<>0 then
Message('Unable to populate record group');
Raise Form_Trigger_Failure;
end if;
Clear_List(list_id);
Populate_list(list_id, group_id);
end;
step 2: create a record group named rg_cat and assign Record Group Query to something like "select categoryname from category"
step 3: call this procedure as
load_list('categoryname','rg_cat'); -
Hi,
VS2013, SQL Server 2012 Express LocalDB, EF 6.0, VB, desktop application with an end user database
What is a reliable method to follow when there is a schema change for an end user database used by a deployed application? In other words, each end user has their own private data, but the database needs to be expanded for additional features, etc.
I list here the steps it seems I must consider. If I've missed any, please also inform:
(1) From the first time the application is installed, it should have already moved all downloaded database files to a separate known location, most likely some sub-folder in <user>\App Data.
(2) When there's a schema change, the new database file(s) must also be moved into the location in item (1) above.
(3) The application must check to see if the new database file(s) have been loaded, and if not, transfer the data from the old database file(s) to the new database file(s).
(4) Then the application can operate using the new schema.
This may seem basic, but for those of us who haven't done it, it seems pretty complicated. Item (3) seems to be the operative issue for database schema changes. Existing user data needs to be preserved, but using the new schema. I'd like
to understand the various ways it can be done, if there are specific tools created to handle this process, and which method is considered best practice.
(1) Should we handle the transfer in a 'one-time use' application method, i.e. do it in application code.
(2) Should we handle the transfer using some type of 'one-time use' SQL query. If this is the best way, can you provide some guidance if there are different alternatives for how to perform this in SQL, and where to learn/see examples?
(3) Some other method?
Thanks.
Best Regards,
AlanHi Uri,
Thank you kindly for your response. Also thanks to Kalman Toth for showing the right forum for such questions.
To clarify the scenario, I did not mean to imply the end user 'owns' the schema. I was trying to communicate that in my scenario, an end user will have loaded their own private data into the database file originally delivered with the application.
If the schema needs to be updated for new application features, the end user's data will of course need to be preserved during the application upgrade if that upgrade includes a database schema change.
Although I listed step 3 as transferring the data, I should have made more clear I was trying to express my limited understanding of how this process "might work", since at the present time I am not an expert with this. I suspected my thinking
is limited and someone would correct me.
This is basically the reason for my post; I am hoping an expert can point me to what I need to learn about to handle database schema changes when application upgrades are deployed. For example, if an SQL script needs to be created and deployed
then I need to learn how to do that. What's the best practice, or most reliable/efficient way to make sure the end user's database is changed to the new schema after the upgraded application is deployed? Correct me if I'm wrong on this,
but updating the end user database will have to be handled totally within the deployment tool or the upgraded application when it first starts up.
If it makes a difference, I'll be deploying application upgrades initially using Click Once from Visual Studio, and eventually I may also use Windows Installer or Wix.
Again, thanks for your help.
Best Regards,
Alan -
How to handle multiple datasources in a web application?
I have a J2EE Web application with Servlets and Java ServerPages. Beside this I have a in-house developed API for certain services built using Hibernate and Spring with POJO's and some EJB.
There are 8 databases which will be used by the web application. I have heard that multiple datasources with Spring is hard to design around. Considering that I have no choice not to use Spring or Hibernate as the API's are using it.
Anyone have a good design spesification for how to handle multiple datasources. The datasource(database) will be chosen by the user in the web application.Let me get this straight. You have a web application that uses spring framework and hibernate to access the database. You want the user to be able to select the database that he wants to access using spring and hibernate.
Hopefully you are using the Spring Framework Hibernate DAO. I know you can have more that one spring application context. You can then trying to load a seperate spring application context for each database. Each application context would have it's own configuration files with the connection parameters for each datasource. You could still use JNDi entries in the web.xml for each datasource.
Then you would need a service locater so that when a user selected a datasource he would get the application context for that datasource which he would use for the rest of his session.
I think it is doable. It means a long load time. And you'll need to keep the application contexts as small as possible to conserve resources. -
How to handle multiple actions in the webservice ?
Hi Guys,
I have multiple operations in the webservcie and under soap action in the receiver soap adapter, i dont know how to handle multiple soap operations.
can anybody guide me, how to acheive this ?
Thanks,
sriniHi Srini !
This weblog shows the general design of a scenario with BPM
/people/krishna.moorthyp/blog/2005/06/09/walkthrough-with-bpm
This link:
http://help.sap.com/saphelp_nw04/helpdata/en/de/766840bf0cbf49e10000000a1550b0/content.htm
show how to insert a predefined BPM pattern. You could use one of the BpmPatternSerialize.... patterns to see how you BPM should look like...
Basically it should be:
1) Receive Step (async/sync, as you need) to trigger the BPM
2) Send step (sync) for first webservice
3) Send step (sync) for second webservice
N) Send step (sync) for N webservice
N+1) if the whole communication is sync, here you need to use a send step to return back the answer to sender.
Regards,
Matias. -
How to handle the quotes('') in the procedure?
Hi all,
I have been struggling with an issue in the procedure. Let us go to the functionality of the preocedure.
I am passing a parameter that has text like
' INDIA,BANGALORE,"INOX,BLR","THILAK NAGAR,JAYA NAGAR "4TH 'T' BLOCK,BANGALORE",560030'
Here, INDIA = country field
BANGALORE = city field
INOX,BLR = Theatre field
THILAK NAGAR,JAYA NAGAR "4TH 'T' BLOCK,BANGALORE = address field
560030 = pin field
I want to load these fields into the table thru procedure. Here the issue is if any field value come with quotes(") inside the quotes like above address field. Since , please guide me how to handle that quotes while identifying the field value for either or address field or some other one.
Table structure:
country varchar2(100 char)
city varchar2(100 char)
theatre varchar2(100 char)
address varchar2(2000 char)
pin NUMBER
Procedure Code:
create or replace
PROCEDURE prc_rollout_upload( p_text VARCHAR2 )
AS
v_quote_ind NUMBER := 0;
v_first_pos NUMBER := 0;
v_end_pos NUMBER := 0;
v_text_data varchar2(32767 CHAR) := p_text;
v_text_data1 varchar2(32767 CHAR);
v_text_arr_ind NUMBER := 0;
v_quote_pos NUMBER := 0;
v_comma_pos NUMBER := 0;
type text_rec IS RECORD(country VARCHAR2(20 CHAR),
CITY VARCHAR2(1000 CHAR),
exhibitor VARCHAR2(1000 CHAR),
address VARCHAR2(10000 CHAR),
PIN varchar2(6)
type v_text_tab is table of text_rec;
v_text_array v_text_tab := v_text_tab();
BEGIN
-- Fetch the values from the string to a PL/SQL table
v_text_data1 := v_text_data;
v_text_arr_ind := v_text_arr_ind + 1;
v_text_array.extend(v_text_arr_ind);
-- Country
IF (INSTR(v_text_data1, CHR(34)) > 0 )
THEN
v_quote_ind := INSTR(v_text_data1, CHR(34));
v_first_pos := INSTR(v_text_data1, CHR(34));
v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
v_text_array(v_text_arr_ind).country := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).country);
v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
END IF;
IF ( v_quote_ind = 0 ) THEN
v_text_array(v_text_arr_ind).country := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).country);
v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
-- DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_first_pos := 0;
v_end_pos := 0;
v_quote_ind := 0;
END IF;
-- City
v_quote_pos := INSTR(v_text_data1,CHR(34));
v_comma_pos := INSTR(v_text_data1,CHR(44));
IF ( v_quote_pos < v_comma_pos )
THEN
v_quote_ind := INSTR(v_text_data1, CHR(34));
v_first_pos := INSTR(v_text_data1, CHR(34));
v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
v_text_array(v_text_arr_ind).city := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).city);
v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
IF ( v_quote_pos > v_comma_pos ) THEN
v_text_array(v_text_arr_ind).city := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
-- DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).city);
v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_first_pos := 0;
v_end_pos := 0;
v_quote_ind := 0;
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
-- Exhibitor
v_quote_pos := INSTR(v_text_data1,CHR(34));
v_comma_pos := INSTR(v_text_data1,CHR(44));
IF ( v_quote_pos < v_comma_pos )
THEN
v_first_pos := INSTR(v_text_data1, CHR(34));
v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
v_text_array(v_text_arr_ind).exhibitor := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).exhibitor);
v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
IF ( v_quote_pos > v_comma_pos ) THEN
v_text_array(v_text_arr_ind).exhibitor := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).exhibitor);
v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
-- DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_first_pos := 0;
v_end_pos := 0;
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
--Address
v_quote_pos := INSTR(v_text_data1,CHR(34));
v_comma_pos := INSTR(v_text_data1,CHR(44));
IF ( v_quote_pos < v_comma_pos )
THEN
v_first_pos := INSTR(v_text_data1, CHR(34));
v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
v_text_array(v_text_arr_ind).address := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).address);
v_text_data1 := SUBSTR(v_text_data1,v_end_pos+2);
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
IF ( v_quote_pos > v_comma_pos ) THEN
v_text_array(v_text_arr_ind).address := SUBSTR(v_text_data1,1,INSTR(v_text_data1,CHR(44))-1);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).address);
v_text_data1 := SUBSTR(v_text_data1,INSTR(v_text_data1,CHR(44))+1);
-- DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_first_pos :=0;
v_end_pos := 0;
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
--PIN
v_quote_pos := INSTR(v_text_data1,CHR(34));
v_comma_pos := INSTR(v_text_data1,CHR(44));
IF ( v_quote_pos < v_comma_pos )
THEN
v_first_pos := INSTR(v_text_data1, CHR(34));
v_end_pos := INSTR(v_text_data1, CHR(34),1,2);
v_text_array(v_text_arr_ind).pin := SUBSTR(v_text_data1,v_first_pos+1,v_end_pos-2);
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).pin);
v_text_data1 := 0;
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
IF ( v_comma_pos IS NULL OR v_quote_pos > v_comma_pos ) THEN
v_text_array(v_text_arr_ind).pin := v_text_data1;
--DBMS_OUTPUT.PUT_LiNE(v_text_array(v_text_arr_ind).pin);
v_text_data1 := 0;
--DBMS_OUTPUT.PUT_LiNE(v_text_data1);
v_first_pos := 0;
v_end_pos := 0;
v_quote_pos := 0;
v_comma_pos := 0;
END IF;
EXCEPTION
WHEN others then
DBMS_OUTPUT.PUT_LiNE(SUBSTR(SQLERRM,1,200));
END prc_rollout_upload;
Oracle version :
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
Your help would be highly appreciated !!!
Regards,
Vissu.....To start with Try this:
SQL> ed
Wrote file afiedt.buf
1 declare
2 v_var VARCHAR2(10000) := 'INDIA,BANGALORE,"INOX,BLR","THILAK NAGAR,JAYA NAGAR ';
3 v_delim VARCHAR2(1) := ',';
4 v_enclose VARCHAR2(1) := '"';
5 v_val VARCHAR2(1000) := NULL;
6 begin
7 v_var := v_var||'"4TH T BLOCK,BANGALORE",500365'||',';
8 FOR I IN 1..5 LOOP
9 v_val := CASE WHEN SUBSTR(v_Var,1,1) <> '"' THEN
10 SUBSTR(v_Var,1,INSTR(v_Var,',',1,1)-1)
11 ELSE
12 SUBSTR(v_Var,2,INSTR(v_Var,'",',1,1) - INSTR(v_Var,'"',1,1) - 1)
13 END;
14 v_Var := CASE WHEN SUBSTR(v_Var,1,1) <> '"' THEN
15 SUBSTR(v_Var,INSTR(v_Var,',',1,1) + 1)
16 ELSE
17 SUBSTR(v_Var,INSTR(v_Var,'",',1,1) + 2)
18 END;
19 dbms_output.put_line(v_Val);
20 END LOOP;
21* end;
SQL> /
INDIA
BANGALORE
INOX,BLR
THILAK NAGAR,JAYA NAGAR "4TH T BLOCK,BANGALORE
500365
PL/SQL procedure successfully completed.
SQL> -
How to handle varchar(4000) field in reporting?
Hello,
I am having a Oracle database, the data in tables of which is being stored from a web application. One of the fields of a table is having varchar(4000) datatype.
The data in this field is text which may contain carriage returns also.
I have to create report of this table. How to display this data properly in a report?
I tried few things:
Accessed the table using SQL Developer and pasted the query output in Excel.
As the text contains carriage returns, it is being spread into one or more rows.
How to handle this? What is the proper way to create report for such data?
Please help.
-SameerYou the following to remove the carriage returns
SQL> select 'a'||chr(10)||'line2
2
SQL> select 'line 1'||chr(10)||'line 2' from dual ;
'LINE1'||CHR(
line 1
line 2
SQL> select replace('line 1'||chr(10)||'line 2',chr(10),'') from dual ;
REPLACE('LIN
line 1line 2
If this is not the soln , can you paste some sample data -
How to handle stored procedure response having multiple queries
Hi Friends,
While working in JDBC to RFC scenario,I faced an issue that my stored procedure is having multiple SQL queries in it. First Select and then update and again some select options.So,how to handle the response of the stored procedure. I read that while using sender JDBC
" db.processDBSQLStatement=<SQL-Select-Statement>
Either specify a valid SQL SELECT statement to select the data to be sent from the specified database, or specify an SQL EXECUTE statement to execute a stored procedure that contains exactly one SELECT statement "
So, please suggest me is there any other way to catch the output of the stored procedure.Because, if select statement is working fine but if any other quires fails then data inconsistencies can happen.Kindly help me out.
Thanks and Regards,
NutanHi nutan,
>>Already exception is handled in SP.But,issue is that select will never fail so, sender adapter will get the resultset from select and continue process.But if later any other query fails in SP adpter wont be getting any response.
Along with exception you need to handle the case when some other query fails. A SP is like a procedure which will do a certain list of activities before providing the output. So during this activity if some query fail then you can send back the response with a message!!!! And in XI handle this error (by routing it to some error receiver etc)
>>I need to try something like creating a temporary table and inserting the resultset of slect statement in that. and perform all other operations and after successful completion of all the queries.Again i want to get all the values from the temporary table. So,whether I can write such query in the sender communication channel.Please suggest me for this.
Approach looks ok, but think of the delay for JDBC sender adapter. IT will invoke your SP and will wait for it to fill a table and do all the processing. I guess this may become a issue for you.
Check on the frequency of this interface and message size before taking this design approach
Regards
Suraj -
How to handle multiple save exceptions (Bulk Collect)
Hi
How to handle Multiple Save exceptions? Is it possible to rollback to first deletion(of child table) took place in the procedure.
There are 3 tables
txn_header_interface(Grand Parent)
orders(parent)
order_items (Child)
One transaction can have one or multiple orders in it.
and one orders can have one or multiple order_items in it.
We need to delete the data from child table first then its parent and then from the grand parent table.if some error occurs anywhere I need to rollback to child record deletion. Since there is flag in child table which tells us when to delete data from database.
Is it possible to give name to Save exceptions?
e.g.
FORALL i IN ABC.FIRST..ABC.LAST SAVE EXCEPTIONS A
FORALL i IN abc.FIRST..ABC.LAST SAVE EXCEPTIONS B
if some error occurs then
ROLLBACK A; OR ROLLBACK B;
Please find the procedure attached
How to handle the errors with Save exception and rollback upto child table deletion.
CREATE OR REPLACE
PROCEDURE DELETE_CONFIRMED_DATA IS
TYPE TXN_HDR_INFC_ID IS TABLE OF TXN_HEADER_INTERFACE.ID%TYPE;
TXN_HDR_INFC_ID_ARRAY TXN_HDR_INFC_ID;
ERROR_COUNT NUMBER;
BULK_ERRORS EXCEPTION;
PRAGMA exception_init(bulk_errors, -24381);
BEGIN
SELECT THI.ID BULK COLLECT
INTO TXN_HDR_INFC_ID_ARRAY
FROM TXN_HEADER_INTERFACE THI,ORDERS OS,ORDER_ITEMS OI
WHERE THI.ID = OS.TXN_HDR_INFC_ID
AND OS.ID = OI.ORDERS_ID
AND OI.POSTING_ITEM_ID = VPI.ID
OI.DW_STATUS_FLAG =4 --data is moved to Datawarehouse
MINUS
(SELECT THI.ID FROM TXN_HEADER_INTERFACE THI,ORDERS OS,ORDER_ITEMS OI
WHERE THI.ID = OS.TXN_HDR_INFC_ID
AND OS.ID = OI.ORDERS_ID
OI.DW_STATUS_FLAG !=4);
IF SQL%NOTFOUND
THEN
EXIT;
END IF;
FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
EXCEPTIONS
DELETE FROM ORDER_ITEMS OI
WHERE OI.ID IN (SELECT OI.ID FROM ORDER_ITEMS OI,ORDERS
OS,TXN_HEADER_INTERFACE THI
WHERE OS.ID = OI.ORDERS_ID
AND OS.TXN_HDR_INFC_ID = THI.ID
AND THI.ID = TXN_HDR_INFC_ID_ARRAY(i));
FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
EXCEPTIONS
DELETE FROM ORDERS OS
WHERE OS.ID IN (SELECT OS.ID FROM ORDERS OS,TXN_HEADER_INTERFACE THI
WHERE OS.TXN_HDR_INFC_ID = THI.ID
AND THI.ID = TXN_HDR_INFC_ID_ARRAY(i));
FORALL i IN TXN_HDR_INFC_ID_ARRAY.FIRST..TXN_HDR_INFC_ID_ARRAY.LAST SAVE
EXCEPTIONS
DELETE FROM TXN_HEADER_INTERFACE THI
WHERE THI.ID = TXN_HDR_INFC_ID_ARRAY(i);
COMMIT;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD-MON-YY HH:MIPM')||':
DELETE_CONFIRMED_DATA: INFO:DELETION SUCCESSFUL');
EXCEPTION
WHEN OTHERS THEN
ERROR_COUNT := SQL%BULK_EXCEPTIONS.COUNT;
DBMS_OUTPUT.PUT_LINE(TO_CHAR(SYSDATE, 'DD-MON-YY HH:MIPM')||':
DELETE_CONFIRMED_DATA: ERROR:Number of errors is ' ||ERROR_COUNT);
FOR indx IN 1..ERROR_COUNT LOOP
DBMS_OUTPUT.PUT_LINE('Error ' || indx || 'occurred during
'||'iteration'||SQL%BULK_EXCEPTIONS(indx).ERROR_INDEX);
DBMS_OUTPUT.PUT_LINE('Error is '
||SQLERRM(-SQL%BULK_EXCEPTIONS(indx).ERROR_CODE));
END LOOP;
END DELETE_CONFIRMED_DATA;
Any suggestion would be of great help.
Thanks in advance
AnuIf you have one or two places in your code that need multiple exceptions, just do it with multiple catch statements. Unless you are trying to write the most compact Programming 101 homework program, inventing tricks to remove two lines of code is not good use of your time.
If you have multiple catches all over your code it could be a code smell. You may have too much stuff happening inside one try statement. It becomes hard to know what method call throws one of those exceptions, and you end up handling an exception from some else piece of code than what you intended. E.g. you mention NumberFormatException -- only process one user input inside that try/catch so it is easy to see what error message is given if that particular input is gunk. The next step of processing goes inside its own try/catch.
In my case, the ArrayIndexOutOfBoundsException and
NumberFormatException should be handled by the same way.Why?
I don't think I have ever seen an ArrayIndexOutOfBoundsException that didn't indicate a bug in the code. Instead of an AIOOBE perhaps there should be an if statement somewhere that prevents it, or the algorithm logic should prevent it automatically. -
How to handle multiple reports with single hyperlink parameter
Please suggest in my drill down report
i have two reports linked with one hyperlink
parameter, how to handle this?
please suggest for popup window with sample solution.
for example
report A--->B--->Chosse Report c or D
based on parameter hyperlink at report B.
Thanks in advance
RajYes U R correct, that
I'm using srw.set_hyperlink in plsql format trigger
to open other reports , now the problem is
how to carry over the hyperlink parameter to popup window
and allow user to choose any reports based on the
parameter value.
for example
report A (Sales person summmary report)
|
| (choose sales person drilled to orders report B)
|
B (report has the hyperlink on order no)
|
|
C,D,E (many reports based on order no
customer,order details,pending items
to be shipped)
Now how to handle the situation from b to c,d,e
I suggest use hyperlink at B to open popup to show
reports C,D,E with the order no has parameter.
please suggest for javascript to open popup window
for reports c,d,e.
Thanks
Raj
Maybe you are looking for
-
Doubts about generating reports in Oracle
Hi, I am Oracle DBA, but I need some instructions from you â oracle developers- related to how implement reports from Oracle 9i Application Server Enterprise built on Sun Solaris 9. Nowadays, my client is using Oracle Reports Server that comes with
-
To solve the iTunes store problem, I have tried the suggestions suggested by Apple on the website to no avail. Since downloading the last iTunes update, I can no longer access radio broadcasts. It tries to connect to tuning service, but the refresh
-
Is CS5 compatible with Windows 8.1
Is CS5 compatibl with Windows 8.1?
-
Help! I have read the forum and tried out every possible solution suggested there. iCloud mail is not pushing in either my Iphone5 or iPad 1. Thanks
-
when i try to uninstall this message pops up error 1606 %APPDATA%