Instead of Trigger Error
Hi ALL,
I am trying to create INSTEAD OF trigger on the existing VIEW, but I getting error as:-
Not found
The requested URL /apex/wwv_flow.show was not found on this server
I'm creating trigger as :-
CREATE OR REPLACE TRIGGER "trigger_name"
INSTEAD OF UPDATE ON "view_name"
FOR EACH ROW
BEGIN
UPDATE query;
UPDATE query;
END;
but when I'm writting only one update query rather two update queires in the above trigger, it is creating but not with two update queries.
Also I created another INSTEAD OF trigger on the same View as:-
CREATE OR REPLACE TRIGGER "trigger_name"
INSTEAD OF INSERT ON "view_name"
FOR EACH ROW
BEGIN
INSERT query;
INSERT query;
END;
this trigger is created without any errors than why INSTEAD OF(FOR UPDATE) trigger is not creating.... can anybody help me out with this issue.....
thxs
regards,
Kumar
Hi again,
everything is working very much fine(I mean instead of trigger with update as well as with insert) when I'm creating on apex workspace.... this is the issue with my development enviornment.... so this is the problem with development DB or something else?????
thxs
regards,
Kumar
Similar Messages
-
INSTEAD OF trigger on view to update a table. error in 4.2apex tabular rpt
I have created a view (LANDINGS_VIEW') that I am hoping to use to add/modify data over several tables. I am using INSTEAD OF trigger to update/insert into the underlying tables. I am receiving the error:
•ORA-01858: a non-numeric character was found where a numeric was expected ORA-06512: at "SAFIS.LANDINGS_V_IO_UPD_TRG", line 4 ORA-04088: error during execution of trigger 'SAFIS.LANDINGS_V_IO_UPD_TRG' (Row 1)I am only setting PRICE = 300.
any thoughts? Am I setting this up propertly? thanks for your help!!
Karen
The LANDING_VIEW is set up as follows:
-- Start of DDL Script for View SAFIS.LANDINGS_VIEW
-- Generated 03-May-2013 10:25:38 from [email protected]
CREATE OR REPLACE VIEW landings_view (
landing_seq,
dealer_rpt_id,
unit_measure,
reported_quantity,
landed_pounds,
dollars,
disposition_code,
grade_code,
species_itis,
market_code,
price,
area_fished,
sub_area_fished,
lease_num,
gear_code,
de,
ue,
dc,
uc,
local_area_code,
fins_attached,
explanation,
late_report,
modified_data,
nature_of_sale,
hms_area_code,
sale_price,
deleted )
AS
select l.LANDING_SEQ,
l.DEALER_RPT_ID,
l.UNIT_MEASURE,
l.REPORTED_QUANTITY,
l.LANDED_POUNDS,
l.DOLLARS,
l.DISPOSITION_CODE,
l.GRADE_CODE,
l.SPECIES_ITIS,
l.MARKET_CODE,
l.PRICE,
l.AREA_FISHED,
l.SUB_AREA_FISHED,
l.LEASE_NUM,
l.GEAR_CODE,
l.DE,
l.UE,
l.DC,
l.UC,
l.LOCAL_AREA_CODE,
a.fins_attached,
a.explanation,
a.late_report,
a.modified_data,
a.nature_of_sale,
a.hms_area_code,
a.sale_price,
a.deleted
from landings l,
landings_hms a
where l.dealer_rpt_id = v('P110_DEALER_RPT_ID') and
l.dealer_rpt_id = a.dealer_rpt_id(+) and
l.landing_seq = a.landing_seq(+)
-- Triggers for LANDINGS_VIEW
CREATE OR REPLACE TRIGGER landings_v_io_upd_trg
INSTEAD OF
UPDATE
ON landings_view
REFERENCING NEW AS NEW OLD AS OLD
DECLARE
v_first_day date;
BEGIN
update landings set landing_seq = :old.landing_seq,
dealer_rpt_id = :old.dealer_rpt_id,
unit_measure = :new.unit_measure,
reported_quantity = :new.reported_quantity,
-- landed_pounds = :new.landed_pounds,
dollars = :new.dollars,
disposition_code= :new.disposition_code,
grade_code = :new.grade_code,
species_itis = :new.species_itis,
market_code = :new.market_code,
price = :new.price,
area_fished = :new.area_fished,
sub_area_fished = :new.sub_area_fished,
-- lease_num = :new.lease_num,
gear_code = :new.gear_code,
de = :new.de,
ue = :new.ue,
dc = :new.ue,
uc = :new.uc,
local_area_code = :new.local_area_code ;
/* update landings_hms set dealer_rpt_id = :old.dealer_rpt_id,
landing_seq = :old.landing_seq,
fins_attached = :new.fins_attached,
explanation = :new.explanation,
late_report = :new.late_report,
modified_data = :new.modified_data,
nature_of_sale = :new.nature_of_sale,
hms_area_code = :new.hms_area_code,
sale_price = :new.sale_price,
de = sysdate,
ue = :new.ue,
dc = :new.dc,
uc = :new.uc ;
end;
-- End of DDL Script for Trigger SAFIS.LANDINGS_KEH_V_IO_TRG
CREATE OR REPLACE TRIGGER landings_v_io_trg
INSTEAD OF
INSERT
ON landings_view
REFERENCING NEW AS NEW OLD AS OLD
DECLARE
v_first_day date;
BEGIN
insert into landings_keh (landing_seq,
dealer_rpt_id,
unit_measure,
reported_quantity,
landed_pounds,
dollars,
disposition_code,
grade_code,
species_itis,
market_code,
price,
area_fished,
sub_area_fished,
lease_num,
gear_code,
de,
ue,
dc,
uc,
local_area_code)
values ( landings_seq.NEXTVAL,
:new.dealer_rpt_id,
:new.unit_measure,
:new.reported_quantity,
:new.landed_pounds,
:new.dollars,
:new.disposition_code,
:new.grade_code,
:new.species_itis,
:new.market_code,
:new.price,
:new.area_fished,
:new.sub_area_fished,
:new.lease_num,
:new.gear_code,
sysdate,
:new.ue,
:new.dc,
:new.uc,
:new.local_area_code) ;
insert into landings_hms (dealer_rpt_id,
landing_seq,
fins_attached,
explanation,
late_report,
modified_data,
nature_of_sale,
hms_area_code,
sale_price,
de,
ue,
dc,
uc,
deleted)
values (:new.dealer_rpt_id,
landings_seq.CURRVAL,
:new.fins_attached,
:new.explanation,
:new.late_report,
:new.modified_data,
:new.nature_of_sale,
:new.hms_area_code,
:new.sale_price,
sysdate,
:new.ue,
:new.dc,
:new.uc,
:new.deleted);
end;
-- End of DDL Script for Trigger SAFIS.LANDINGS_KEH_V_IO_TRG
-- End of DDL Script for View SAFIS.LANDINGS_VIEWbtw, I have succefully run the following update in sqlplus.
update landings set landing_seq = 8604583,
dealer_rpt_id = 2660038,
unit_measure = 'LB',
reported_quantity = 3,
-- landed_pounds = :new.landed_pounds,
dollars = 900,
disposition_code= '001',
grade_code = '10',
species_itis = '160200',
market_code = 'UN',
price = 30,
area_fished = null,
sub_area_fished =null,
-- lease_num = :new.lease_num,
gear_code = '050',
de = sysdate,
ue = 'keh',
dc = null,
uc = 'keh',
local_area_code = null
where landing_seq = 8604583; I am using apex 4.2
Edited by: KarenH on May 3, 2013 10:29 AM
Edited by: KarenH on May 3, 2013 10:31 AM
Edited by: KarenH on May 3, 2013 11:04 AM
Edited by: KarenH on May 3, 2013 4:09 PMcould it be so simple?
when I created the tabular form on my view, LANDINGS_VIEW, the APPLYmru was automatically generated, referencing the view name LANDINGS_VIEW. I modified that to indicate the table name (LANDINGS). I am not certain why that would work, but it seems to so far.
this post was helpful: Re: instead of trigger on view
I am now testing to make certain both the underlying tables can be updated, LANDINGS and LANDINGS_HMS -
BULK INSERT into View w/ Instead Of Trigger - DML ERROR LOGGING Issue
Oracle 10.2.0.4
I cannot figure out why I cannot get bulk insert errors to aggregate and allow the insert to continue when bulk inserting into a view with an Instead of Trigger. Whether I use LOG ERRORS clause or I use SQL%BULK_EXCEPTIONS, the insert works until it hits the first exception and then exits.
Here's what I'm doing:
1. I'm bulk inserting into a view with an Instead of Trigger on it that performs the actual updating on the underlying table. This table is a child table with a foreign key constraint to a reference table containing the primary key. In the Instead of Trigger, it attempts to insert a record into the child table and I get the following exception: +5:37:55 ORA-02291: integrity constraint (FK_TEST_TABLE) violated - parent key not found+, which is expected, but the error should be logged in the table and the rest of the inserts should complete. Instead the bulk insert exits.
2. If I change this to bulk insert into the underlying table directly, it works, all errors get put into the error logging table and the insert completes all non-exception records.
Here's the "test" procedure I created to test my scenario:
View: V_TEST_TABLE
Underlying Table: TEST_TABLE
PROCEDURE BulkTest
IS
TYPE remDataType IS TABLE of v_TEST_TABLE%ROWTYPE INDEX BY BINARY_INTEGER;
varRemData remDataType;
begin
select /*+ DRIVING_SITE(r)*/ *
BULK COLLECT INTO varRemData
from TEST_TABLE@REMOTE_LINK
where effectiveday < to_date('06/16/2012 04','mm/dd/yyyy hh24')
and terminationday > to_date('06/14/2012 04','mm/dd/yyyy hh24');
BEGIN
FORALL idx IN varRemData.FIRST .. varRemData.LAST
INSERT INTO v_TEST_TABLE VALUES varRemData(idx) LOG ERRORS INTO dbcompare.ERR$_TEST_TABLE ('INSERT') REJECT LIMIT UNLIMITED;
EXCEPTION WHEN others THEN
DBMS_OUTPUT.put_line('ErrorCode: '||SQLCODE);
END;
COMMIT;
end;
I've reviewed Oracle's documentation on both DML logging tools and neither has any restrictions (at least that I can see) that would prevent this from working correctly.
Any help would be appreciated....
Thanks,
SteveThanks, obviously this is my first post, I'm desperate to figure out why this won't work....
This code I sent is only a test proc to try and troubleshoot the issue, the others with the debug statement is only to capture the insert failing and not aggregating the errors, that won't be in the real proc.....
Thanks,
Steve -
ERROR - 16016 - FOR FORM CREATED ON A VIEW AND USING INSTEAD OF TRIGGER
I have created a form based on a view. The view has instead of Trigger on it.
When I try to update the form I get the following error:
Error: An unexpected error occurred: ORA-22816: unsupported feature with RETURNING clause (WWV-16016)
Can anyone tell what the problem is?
Thanks
nullTHANKS A LOT IT WORKED.
<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by Rene' Castle ([email protected]):
This is a bug with views. If you can edit the PL/SQL code that is generated, you can remove the RETURNING clause and it will work.
NOTE: This will have to be done every time you edit the form.
<HR></BLOCKQUOTE>
null -
Issue in Invoking an Updatable View with Instead of Trigger
Hi,
I am trying to insert a record using Updatable View with Instead of Trigger. When i try to save the data, i get the below error:
java.sql.SQLException: ORA-01403: no data found
ORA-06512: at line 1
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:457)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:405)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:889)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:476)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:204)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:540)
at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:213)
at oracle.jdbc.driver.T4CCallableStatement.executeForRows(T4CCallableStatement.java:1075)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1466)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3752)
at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:3887)
at oracle.jdbc.driver.OracleCallableStatement.executeUpdate(OracleCallableStatement.java:9323)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeUpdate(OraclePreparedStatementWrapper.java:1508)
at weblogic.jdbc.wrapper.PreparedStatement.executeUpdate(PreparedStatement.java:172)
at oracle.jbo.server.OracleSQLBuilderImpl.doEntityDML(OracleSQLBuilderImpl.java:432)
at oracle.jbo.server.EntityImpl.doDMLWithLOBs(EntityImpl.java:8566)
Can someone help me resolve this issue?
Also it would be great if you can share Sample codes for Invoking an updatable view with instead of trigger on Save/commit.
Regards,
JeevanAs a trigger is executed in the db and not in your app it's really hard to help as you did not give any useful information.
Have you read this blog http://stegemanoracle.blogspot.com/2006/03/using-updatable-views-with-adf.html ?
Timo
Edited by: Timo Hahn on 22.09.2011 09:15
And my friend google also found http://technology.amis.nl/blog/1447/adf-business-components-resfresh-after-insertupdate-and-instead-of-triggers -
Instead of trigger example - INSERT works but UPDATE and DELETE does not?
Below is a demostration script of what I am trying to troubleshoot. Tests are done on 10gR2;
conn system/system
drop table tt purge ;
create table tt nologging as select * from all_users ;
alter table tt add constraint pk_tt_user_id primary key (user_id) nologging ;
analyze table tt compute statistics for table for all indexed columns ;
conn hr/hr
drop database link dblink ;
create database link dblink
connect to system identified by system
using 'xe.turkcell' ;
select * from global_name@dblink ;
drop view v_tt ;
create view v_tt as select username, user_id, created from tt@dblink order by 2 ;
select count(*) from v_tt ;
COUNT(*)
13
drop sequence seq_pk_tt_user_id ;
create sequence seq_pk_tt_user_id
minvalue 1000 maxvalue 99999
increment by 1;
create synonym tt for tt@dblink ;
CREATE OR REPLACE PROCEDURE prc_update_tt(old_tt v_tt%ROWTYPE, new_tt v_tt%ROWTYPE) IS
BEGIN
IF old_tt.user_id != new_tt.user_id THEN
RETURN; -- primary key
END IF;
IF old_tt.user_id IS NOT NULL AND new_tt.user_id IS NULL THEN
DELETE FROM tt
WHERE user_id = nvl(old_tt.user_id,
-99);
RETURN;
END IF;
IF (old_tt.username IS NULL AND new_tt.username IS NOT NULL) OR
(old_tt.username IS NOT NULL AND new_tt.username != old_tt.username) THEN
UPDATE tt
SET username = new_tt.username
WHERE user_id = nvl(old_tt.user_id,
-99);
END IF;
IF (old_tt.created IS NULL AND new_tt.created IS NOT NULL) OR
(old_tt.created IS NOT NULL AND new_tt.created != old_tt.created) THEN
UPDATE tt
SET created = new_tt.created
WHERE user_id = nvl(old_tt.user_id,
-99);
END IF;
END prc_update_tt;
CREATE OR REPLACE PROCEDURE prc_insert_tt(old_tt v_tt%ROWTYPE, new_tt v_tt%ROWTYPE) IS
new_tt_user_id NUMBER;
BEGIN
SELECT seq_pk_tt_user_id.NEXTVAL INTO new_tt_user_id FROM dual;
INSERT INTO tt
(username, user_id, created)
VALUES
(new_tt.username, new_tt_user_id, new_tt.created);
END prc_insert_tt;
CREATE OR REPLACE PROCEDURE prc_delete_tt(old_tt v_tt%ROWTYPE, new_tt v_tt%ROWTYPE) IS
BEGIN
DELETE FROM tt
WHERE user_id = nvl(old_tt.user_id,
-99);
END prc_delete_tt;
CREATE OR REPLACE TRIGGER trg_iof_v_tt
INSTEAD OF UPDATE OR INSERT OR DELETE ON v_tt
FOR EACH ROW
DECLARE
new_tt v_tt%ROWTYPE;
old_tt v_tt%ROWTYPE;
BEGIN
dbms_output.put_line('INSTEAD OF TRIGGER fired');
dbms_output.put_line(':NEW.user_id ' || :NEW.user_id);
dbms_output.put_line(':OLD.user_id ' || :OLD.user_id);
dbms_output.put_line(':NEW.username ' || :NEW.username);
dbms_output.put_line(':OLD.username ' || :OLD.username);
dbms_output.put_line(':NEW.created ' || :NEW.created);
dbms_output.put_line(':OLD.created ' || :OLD.created);
new_tt.user_id := :NEW.user_id;
new_tt.username := :NEW.username;
new_tt.created := :NEW.created;
old_tt.user_id := :OLD.user_id;
old_tt.username := :OLD.username;
old_tt.created := :OLD.created;
IF inserting THEN
prc_insert_tt(old_tt,
new_tt);
ELSIF updating THEN
prc_update_tt(old_tt,
new_tt);
ELSIF deleting THEN
prc_delete_tt(old_tt,
new_tt);
END IF;
END trg_iof_v_tt;
set serveroutput on
set null ^
insert into v_tt values ('XXX', -1, sysdate) ;
INSTEAD OF TRIGGER fired
:NEW.user_id -1
:OLD.user_id
:NEW.username XXX
:OLD.username
:NEW.created 30/01/2007
:OLD.created
1 row created.
commit ;
select * from v_tt where username = 'XXX' ;
USERNAME USER_ID CREATED
XXX 1000 31/01/2007 <- seems to be no problem with insert part but
update v_tt set username = 'YYY' where user_id = 1000 ;
INSTEAD OF TRIGGER fired
:NEW.user_id
:OLD.user_id
:NEW.username YYY
:OLD.username
:NEW.created
:OLD.created
1 row updated.
commit ;
select count(*) from v_tt where username = 'YYY' ;
COUNT(*)
0 <- here is my first problem with update part, Oracle said "1 row updated."
delete from v_tt where user_id = 1000 ;
INSTEAD OF TRIGGER fired
:NEW.user_id
:OLD.user_id
:NEW.username
:OLD.username
:NEW.created
:OLD.created
1 row deleted.
commit ;
select count(*) from v_tt ;
COUNT(*)
14 <- here is my second problem with delete part, Oracle said "1 row deleted."
Any comments will be welcomed, thank you.
Message was edited by:
TongucY
changed "-1" values to "1000" in the where clause of delete and update statements.
it was a copy/paste mistake, sorry for that.What table do you process in your procedures ? You don't use DBLINK to
reference remote table in your procedures.
Seems, you have table "TT" in "HR" schema too.
Look:
SQL> create table tt nologging as select * from all_users where rownum <=3;
Table created.
SQL> select * from tt;
USERNAME USER_ID CREATED
SYS 0 25-APR-06
SYSTEM 5 25-APR-06
OUTLN 11 25-APR-06
SQL> conn scott/tiger
Connected.
SQL> create database link lk65 connect to ... identified by ... using 'nc65';
Database link created.
SQL> select * from tt@lk65;
USERNAME USER_ID CREATED
SYS 0 25-APR-06
SYSTEM 5 25-APR-06
OUTLN 11 25-APR-06
SQL> create view v_tt as select username, user_id, created from tt@lk65 order by 2;
View created.
SQL> select * from v_tt;
USERNAME USER_ID CREATED
SYS 0 25-APR-06
SYSTEM 5 25-APR-06
OUTLN 11 25-APR-06
SQL> create sequence seq_pk_tt_user_id
2 minvalue 1000 maxvalue 99999
3 increment by 1;
Sequence created.
SQL> CREATE OR REPLACE PROCEDURE prc_insert_tt(old_tt v_tt%ROWTYPE, new_tt v_tt%ROWTYPE) IS
2 new_tt_user_id NUMBER;
3 BEGIN
4 SELECT seq_pk_tt_user_id.NEXTVAL INTO new_tt_user_id FROM dual;
5 INSERT INTO tt
6 (username, user_id, created)
7 VALUES
8 (new_tt.username, new_tt_user_id, new_tt.created);
9 END prc_insert_tt;
10 /
Warning: Procedure created with compilation errors.
SQL> show error
Errors for PROCEDURE PRC_INSERT_TT:
LINE/COL ERROR
5/1 PL/SQL: SQL Statement ignored
5/13 PL/SQL: ORA-00942: table or view does not exist
SQL> edit
Wrote file afiedt.buf
1 CREATE OR REPLACE PROCEDURE prc_insert_tt(old_tt v_tt%ROWTYPE, new_tt v_tt%ROWTYPE) IS
2 new_tt_user_id NUMBER;
3 BEGIN
4 SELECT seq_pk_tt_user_id.NEXTVAL INTO new_tt_user_id FROM dual;
5 INSERT INTO tt@lk65
6 (username, user_id, created)
7 VALUES
8 (new_tt.username, new_tt_user_id, new_tt.created);
9* END prc_insert_tt;
SQL> /
Procedure created.Rgds. -
How can I retrieve the condition in an update or delete using instead of trigger
I have 2 tables, on which a view is created. To distinguish the tables within the view trigger, a column "source" had been added in the view creation. I want to be able to delete row(s) in table t1 or table t2 through the view, depending on a condition. The problem is that I don't know how I can get back the delete condition IN the INSTEAD of trigger :
CREATE TABLE t1(m NUMBER, n VARCHAR2(10), o date);
CREATE TABLE t2(a NUMBER, b VARCHAR2(10), c date);
-- The view is created based on the 2 tables.
CREATE OR REPLACE VIEW vt12 AS
SELECT 't1' source, m, n, o
FROM t1
UNION
SELECT 't2' source, a, b, c
FROM t2;
-- The trigger will fire whenever INSERT is performed on the tables through the view
create or replace trigger tvt12 instead of insert or delete on vt12
begin
if inserting then
if :new.source = 't1' then
insert into t1 values (:new.m, :new.n, :new.o);
else
-- will insert a default value of -1 for the fourth column "d"
insert into t2(a,b,c,d) values (:new.m, :new.n, :new.o, -1);
end if;
elsif deleting then
-- We don't know the condition for the deletion, so all rows from the
-- table from which the current row is coming will be deleted
if :old.source = 't1' then
delete t1;
else
delete t2;
end if;
end if;
end;
show error
insert into vt12 values ('t1',1,'1',sysdate);
insert into vt12 values ('t2',2,'2',sysdate+1);
insert into vt12 values ('t1',3,'3',sysdate+2);
insert into vt12 values ('t2',4,'4',sysdate+3);
insert into vt12 values ('t1',5,'5',sysdate+4);
insert into vt12 values ('t2',6,'6',sysdate+5);
commit;
select * from vt12;
select * from t1;
select * from t2;
delete vt12 where m = 1;
commit;
select * from vt12;
select * from t1;
select * from t2;
When I execute this script, the delete statement seems to recognize that the condition is affecting a row in table t1, and therefore deletes all rows from the table, as specified in the delete statement of the trigger... But, what I want to do is ONLY to delete the row affected by the original condition. So my question is to know how I can get back the original condition for the delete, and still use it in the trigger, that will be executed INSTEAD of the delete statement.. I checked in the doc, and everywhere an example of INSTEAD OF trigger can be found, but it's always and only using an INSTEAD OF INSERT trigger, which doesn't need a condition.
Can anyone help ?
nullI've never faced this case myself, but from the documentation it would seem that the INSTEAD OF DELETE is also a FOR EACH ROW trigger. Therefore, you don't really have to worry about the actual "where" clause of the original "delete" operation: Oracle has it all parsed for you, so you just need to redirect, in turn, each view record being deleted to the appropriate table.
In extenso: for your
delete vt12 where m = 1;
=> the INSTEAD OF trigger fires once for all records in vt12 where m=1, and I would guess that you trigger code should look like:
begin
delete from t1 where m = :old.m and n = :old.n and o = :old.o;
delete from t2 where a = :old.m and b = :old.n and c = :old.o;
end;
It's a bit of overkill compared to the "where" clause of the original "delete" statement, but it should do the job...
BTW, if by any luck you do have some primary key on tables t1 and t2 (say: columns o and c respectively), then obviously you can make the thing simpler:
begin
delete from t1 where o = :old.o;
delete from t2 where c = :old.o;
end;
HTH - Didier -
Insert order by records into a view with a instead of trigger
Hi all,
I have this DML query:
INSERT INTO table_view t (a,
b,
c,
d,
e)
SELECT a,
b,
c,
d,
e
FROM table_name
ORDER BY dtable_view is a view with an INSTEAD OF trigger and table_name is a table with my records to be inserted.
I need the ORDER BY clause because in my trigger i call a procedure who treat each record and insert into a table, used in the view. I need to garantee these order.
If i put an other SELECT statement outside, like this:
INSERT INTO table_view t (a,
b,
c,
d,
e)
SELECT a,
b,
c,
d,
e
FROM table_name
ORDER BY dIt works. But I can put these new SELECT because these query is created automatic by Oracle Data Integrator.
What I'm asking you is if there any solution to this problem without changing anything in the Oracle Data Integrator. Or, in other words, if there is any simple solution other than to add a new SELECT statement.
Thanks in advance,
Regards.Sorry... copy+paste error :)
INSERT INTO table_view t (a,
b,
c,
d,
e)
SELECT *
FROM ( SELECT a,
b,
c,
d,
e
FROM table_name
ORDER BY d)I need to insert him by a D column order, because my trigger needs to validate each record and insert him. I have some restrictions. For example, my records are:
2 1 2006 M
1 2 2007 M
1 3 2007 S 2007
1 2 2007 S 2007
2 1 2009 S
2 1 2009 S
I want to insert the 'M' records first and then the 'S' records because the 'S' records only makes sense in target table is exists 'M' records
Regards,
Filipe Almeida -
Issue with instead of trigger on a view
Gurus,
I have an issue with an instead of trigger on a view. The trigger is listed below. The insert and update seem to be working fine but the delete section is not.
From the application, we have a screen on which we attach images. We trigger of an insert and update when we attach images. We are using hibernate as our object relational mapping tool.
We have added some logging into the delete section but that portion of the trigger does not seem to be executing at all.
Please advise.
Thanks
Hari
CREATE OR REPLACE TRIGGER trg_vw_result_image_uid
INSTEAD OF
INSERT OR DELETE OR UPDATE
ON vw_result_image
REFERENCING NEW AS NEW OLD AS OLD
DECLARE
v_cnt number(38);
v_cnt_old number(38);
v_err_msg VARCHAR2 (250);
BEGIN
-- v_rslt_id number(38);
-- v_cnt number(38);
select count(1) into v_cnt from result_image_master
where RSLT_IMAGE_ID = :new.RSLT_IMAGE_ID;
--select count(1) into v_cnt from result_image_master
-- where ACC_BLKBR_ID = :new.ACC_BLKBR_ID
-- and upper(RSLT_IMAGE_NM) = upper(:new.RSLT_IMAGE_NM);
select count(1) into v_cnt_old from result_image_master
where RSLT_IMAGE_ID = :old.RSLT_IMAGE_ID;
insert into t2( TEXT_VAL, DT1, seq1)
values (' before v_cnt', sysdate, t6.NEXTVAL);
--if v_cnt = 0
--****INSERTING
IF INSERTING
THEN
insert into t2( TEXT_VAL, DT1, seq1)
values (' v_cnt is 0 and inserting into result_image_master', sysdate, t6.NEXTVAL);
insert into t2( TEXT_VAL, DT1, seq1)
values (' inserted bb id :'||:new.ACC_BLKBR_ID, sysdate, t6.NEXTVAL);
insert into result_image_master (
RSLT_IMAGE_ID
,RSLT_IMAGE_HBR_VER
,RSLT_IMAGE_TYPE_ID
,RSLT_IMAGE_NM
,RSLT_IMAGE_LABEL
,RSLT_IMAGE_SEQ
,RSLT_SHOW_ON_RPT
,RSLT_SLIDE_NO
,RSLT_CELL_NO
,RSLT_X_COORD
,RSLT_Y_COORD
,ACC_BLKBR_ID
,CREATED_BY
,DATE_CREATED
,MODIFIED_BY
,DATE_MODIFIED
values (
:new.RSLT_IMAGE_ID
,:new.RSLT_IMAGE_HBR_VER
,:new.RSLT_IMAGE_TYPE_ID
,:new.RSLT_IMAGE_NM
,:new.RSLT_IMAGE_LABEL
,:new.RSLT_IMAGE_SEQ
,:new.RSLT_SHOW_ON_RPT
,:new.RSLT_SLIDE_NO
,:new.RSLT_CELL_NO
,:new.RSLT_X_COORD
,:new.RSLT_Y_COORD
,:new.ACC_BLKBR_ID
,:new.CREATED_BY
,:new.DATE_CREATED
,:new.MODIFIED_BY
,:new.DATE_MODIFIED
insert into result_image_blob (
RSLT_IMAGE_ID
,rslt_image_blob
values (
:new.RSLT_IMAGE_ID
,:new.rslt_image_blob
--****UPDATING
ELSIF UPDATING
-- v_cnt > 0 --
THEN
insert into t2( TEXT_VAL, DT1, seq1)
values (' updating result_image_master', sysdate, t6.nextval);
insert into t2( TEXT_VAL, DT1, seq1)
values (' updating bb id :'||:new.ACC_BLKBR_ID, sysdate, t6.nextval);
update result_image_master
set RSLT_IMAGE_HBR_VER = RSLT_IMAGE_HBR_VER + 1
,RSLT_IMAGE_TYPE_ID = :new.RSLT_IMAGE_TYPE_ID
,RSLT_IMAGE_NM = :new.RSLT_IMAGE_NM
,RSLT_IMAGE_LABEL = :new.RSLT_IMAGE_LABEL
,RSLT_IMAGE_SEQ = :new.RSLT_IMAGE_SEQ
,RSLT_SHOW_ON_RPT = :new.RSLT_SHOW_ON_RPT
,RSLT_SLIDE_NO = :new.RSLT_SLIDE_NO
,RSLT_CELL_NO = :new.RSLT_CELL_NO
,RSLT_X_COORD = :new.RSLT_X_COORD
,RSLT_Y_COORD = :new.RSLT_Y_COORD
,ACC_BLKBR_ID = :new.ACC_BLKBR_ID
,MODIFIED_BY = :new.MODIFIED_BY
,DATE_MODIFIED = :new.DATE_MODIFIED
where RSLT_IMAGE_ID = :new.RSLT_IMAGE_ID;
update result_image_blob
set rslt_image_blob = :new.rslt_image_blob
where RSLT_IMAGE_ID = :new.RSLT_IMAGE_ID;
END IF;
IF DELETING OR v_cnt_old > 0
THEN
insert into t2( TEXT_VAL, DT1, seq1) values (' deleting rows ...', sysdate, t6.NEXTVAL);
DELETE from result_image_blob where RSLT_IMAGE_ID = :old.RSLT_IMAGE_ID;
insert into t2( TEXT_VAL, DT1, seq1) values ('deleting result_image_blob : '||:old.RSLT_IMAGE_ID , sysdate, t6.NEXTVAL);
DELETE from result_image_master where RSLT_IMAGE_ID = :old.RSLT_IMAGE_ID;
insert into t2( TEXT_VAL, DT1, seq1) values ('deleting result_image_master : '||:old.RSLT_IMAGE_ID , sysdate, t6.NEXTVAL);
END IF;
EXCEPTION
WHEN OTHERS THEN
v_err_msg := SQLERRM;
insert into t2( TEXT_VAL, DT1, seq1) values (v_err_msg, sysdate, t6.nextval);
END;
Edited by: bhanujh on Sep 13, 2010 7:55 AMbhanujh wrote:
The error msg that we are getting is
09/08/2010 4:02:09 PM: Unable to save the results :: Could not execute JDBC batch updateSorry, we don't recognize this message as any valid Oracle error.
:p -
Using Oracle 8.0.5 and
Forms 5.0.6.8.0
I created a view with an instead of trigger and I can insert rows using SQL.
When i create a form with a block based on the view and I try to update a row, the form returns the error "FRM-40602 cannot insert or update data in a view"
If I try to enter data in an item for insert, I get the error "FRM-40200 field is protected against update"
All the block and item properties seem to be set correctly for insert and update.
Why can't I insert or update?I think you want to post this question to the Developer 6.0 forum. This discussion forum is for JDeveloper, a different product.
Laura -
I created a view to use in a tabular form and only need to update one column from one table of that view. How do I write the instead of trigger to accomplish this? The field that I am trying to update is a select list-yes/no column in the tabular form. Upon submit with the wizard MRU and the instead of trigger I wrote the update doesn't take effect.
Without the trigger I get this error:
ORA-01445: cannot select ROWID from, or sample, a join view without a key-preserved tableHere's the view:
CREATE OR REPLACE FORCE VIEW "GET_USERNAME_VW" ("DOC_INFO_ID", "DOC_TITLE", "DOC_LINK", "ECRNO", "OWNER", "ISO_NUMBER", "STATUS_ID", "FILE_TYPE", "APPROVAL_REQ", "APPROVED", "JOB_DESC", "USER_NAME") AS
select "DOC_INFO"."DOC_INFO_ID" as "DOC_INFO_ID",
"DOC_INFO"."DOC_TITLE" as "DOC_TITLE",
"DOC_INFO"."DOC_LINK" as "DOC_LINK",
"DOC_INFO"."ECRNO" as "ECRNO",
"DOC_INFO"."OWNER" as "OWNER",
"DOC_INFO"."ISO_NUMBER" as "ISO_NUMBER",
"DOC_INFO"."STATUS_ID" as "STATUS_ID",
"DOC_INFO"."FILE_TYPE" as "FILE_TYPE",
"DOC_INFO"."APPROVAL_REQ" as "APPROVAL_REQ",
"DOC_INFO"."APPROVED" as "APPROVED",
"SH_JOB_DESCRIPTION"."JOB_DESC" as "JOB_DESC",
"SH_EMPLOYEES"."USER_NAME" as "USER_NAME"
from "SH_EMPLOYEES" "SH_EMPLOYEES",
"SH_JOB_DESCRIPTION" "SH_JOB_DESCRIPTION",
"DOC_INFO" "DOC_INFO"
where "DOC_INFO"."OWNER"="SH_JOB_DESCRIPTION"."JOB_DESC"
and "SH_JOB_DESCRIPTION"."JOB_DESC_ID"="SH_EMPLOYEES"."JOB_DESC_ID"
and "DOC_INFO"."STATUS_ID" IN (1,2)
/Here's the trigger I created
CREATE TRIGGER GET_APPROVAL
INSTEAD OF UPDATE ON GET_USERNAME_VW
REFERENCING NEW AS n
FOR EACH ROW
BEGIN
update doc_info set approval_req = :n.approval_req
END;As always, TIA!
Alexandra
Edited by: userRRRYB on Jul 11, 2011 4:16 PM - ADDED VIEWAlexandra,
You're going to get that error when creating a tabular form off of a complex view because of the validations APEX creates for you, not because of your trigger. Delete those validations and try again.
Of course, you're going to want to add the where clause to your trigger, or you'll find that you're updating many more rows than you want...
-David -
Instead-of Trigger of View on a Remote Table Fails!!!
Hi all,
I'm trying to create an INSTEAD OF (UPDATE or INSERT) trigger on a view V1 in DATABASE DB1 (Linux 7.3 or 7.2, ORACLE 9.2.0.1.0 - Production).The view V1 is created on a remote table through a DBLINK.But I always get such error when I update the view V1 using statements such as "update v1 set oid=oid+1000" :
ORA-03113 end-of-file on communication channel
But I can execute those statements successfully in Oracle of version 9.0.1.0.0 .
What I want to say is that if some special configs is needed to support instead-of trigger of a view on a remote table ?Hi all,
I'm trying to create an INSTEAD OF (UPDATE or INSERT) trigger on a view V1 in DATABASE DB1 (Linux 7.3 or 7.2, ORACLE 9.2.0.1.0 - Production).The view V1 is created on a remote table through a DBLINK.But I always get such error when I update the view V1 using statements such as "update v1 set oid=oid+1000" :
ORA-03113 end-of-file on communication channel
But I can execute those statements successfully in Oracle of version 9.0.1.0.0 .
What I want to say is that if some special configs is needed to support instead-of trigger of a view on a remote table ? -
View, instead of trigger and ORA-01031
Hello,
I have a view based on outer joins like
CREATE VIEW vt ( colV1, colV2, colV3, colV4, colV5, colV6, colV7, colV8 ) AS
SELECT A.colA1, A.colA2, C.colB0, B.colB2, B.colB3, B.colB4, C.colC2, H.colH2
FROM tabA A
,tabB B
,tabC C
,( SELECT ...
FROM tabD D
,tabE E
WHERE D.colD1 = E.colE1
) H
WHERE A.colA1 = B.colB1
AND LTRIM(B.colB2,'A') = LTRIM(C.colC1(+),'A')
AND B.colB3 = H.colH1(+); and an instead of trigger
CREATE OR REPLACE TRIGGER vt_upd
INSTEAD OF UPDATE ON vt
BEGIN
UPDATE tabB
SET colB4 = :NEW.colV6
WHERE colB0 = :NEW.colV2;
END;An now the problem: an update statement UPDATE vt set colV6=1 WHERE colV1=1; in SQL*Plus works as it should, but performing an update in APEX from a tabular or edit form shows an error: ORA-01031:ORA-01031: insufficient privileges, update...The strange thing: in both sessions there is the same user USER1 logged on !
Why this difference ? Can anybody explain ?
Regards,
HeinzHi Heinz,
Your statement -
what I wrote as table tabC in reality is a view to one table and one view in another schema.That'll be it, you need to grant explicit rights for the objects in that schema to the schema that is your parsing schema for your workspace.
In other words, if you have -
1) Workspace 'A' with parsing schema 'B'
and you are trying to do -
select foo from c.bar
i.e. you're trying to query an object in schema 'C'.
Then you need to (as a DBA or connected to schema C) -
grant select on bar to b;Roles won't work (when used through APEX)...I can't say that any other way, you might find it works in SQLPlus with roles, but through APEX it won't...you need those explicit grants.
Hope this makes sense.
John. -
Hai to all,
I wnat to validate one field in sap b1.if that field is null then that screen must not allow to insert.
For example if we doesn't enter the value for comment in A/P invoice then A/P invoice is not saved.
It is possible when using the instead of trigger.I create the trigger for the opch table .
If comments is null then print "enter the comment'
else insert into opch from inserted table.
When i add the A/P invoice with or without comment then I got the error "an internal error os occured"
Can any one helpme?
Regrads,
S.Ramya.First of all, adding trigers to sap tables isnt allowed...
For checking use transaction notification stored procedure - its on sql server in programability, stored procedure, right click, modify
in section sith Add your code here add code
if @object_type = '18' and (@transaction_type= 'A' or @transaction_type= 'U')
begin
if 0 < (select count(docentry) from opch where docentry = @list_of_cols_val_tab_del and len(Comments
) = 0)
begin
select @error =1
select @error_message = 'error message.'
end
end
This will check the comments to be filled -
Instead of trigger on view with CLOB data
I have writed Instead of trigger for view "article(id,text)" with CLOB
field "text".
create or replace trigger v_article_insert
instead of insert on v_article
for each row
declare
begin
insert into article(id,text) values(id,:new.text);
end v_article_insert;
When I try to do DML (insert, update), forexample:
insert into v_article(text) values('bla-bla')
I get:
ORA-25008 no implicit conversion to LOB datatype in instead-of trigger.
( Cause: When inserting or updating a view using instead-of trigger, the
new value for a LOB view column is of a different datatype.
Action: Specified a LOB value as the new value for the LOB view
column.)
insert into v_article(text) values(empty_clob()) - It works...
What does it mean and what is right syntax for DML for CLOB fields in
instead of triggers?When inserting CLOBs you create the row with an Empty_Clob() to initialize the CLOB field. Then you can update the empty CLOB with your CLOB value.
The error message is telling you that Oracle will not convert your CLOB to the initialization value needed.
Maybe you are looking for
-
Hi guys, Perhaps, you can help in this query, SELECT Br FROM crm where project = :P2_Project :P2_Project : is " a value in a list of values Item" that contains X, Y, Z Only if the value "X" is picked, then It should be replace for another value such
-
Safari starts automatically when restarting (Snow Leopard)
Two days ago, Safari began to start automatically when restarting the system (iMac, Snow Leopard). I checked in Accounts>Login Item and it doesn't appear there. I also right-clicked the icon in the dock and the option to open when starting session wa
-
I updated Flashplayer and then found that Google Chrome has installed itself on my PC. I swear I did not give it permission. I was then unable to connect to my usual websites, getting message unable to connect to .... I have uninstalled Chrome and no
-
Printer Error with all iWork products
Hi. I don't have a printer attached tot eh computer but I want to save a document as a PDF. I can do this in all applications other than iWork applications. printer Error comes up. Anyone know how to solve this problem?
-
Walkman app disappearing playlists
I'm having a problem with the Walkman app playlists. I synced my music and playlists with musicbee and it saves the Playlist as pla format. They Playlist appear initially but then later on they disappear. Anyone know why this is happening?