Before and After insert or update rowcount
Hi
I have several extract objects procs which are calling various build objects procs which in turn are inserting or updating the tables...now when i run these objects sometimes i get no errors and everything seems to be running perfectly but the tables do not get updated ? now what i am trying to achieve here is get some kind of summary where i can see the before and after rowcount..for that i have created a table of every extract object proc and another table with the coressponding tables being updated by tht proc...can anyone pls tell me how should i look into these procs and how do i get the rowcount for a particular table before and after the procedure was run ?
Thanks a lot in advance
Hi,
On which version of RDBMS are you working , because if you're on 10g then just enable auditing or even FGA on the tables were you want to see the changes,
Then query the DBA-AUDIT (not sure of the name anymore) view.
If not then create a audit package yourself.
something like
create or replace package pck$audit as
procedure prc$check_tablecount(p_tablename IN VARCHAR2, p_status IN VARCHAR2);
end;
create or replace package body pck$audit as
procedure prc$check_tablecount(p_tablename IN VARCHAR2,p_status IN VARCHAR2) IS
sqlstr VARCHAR2(100);
v_count NUMBER;
begin
sqlstr := 'SELECT COUNT(*) FROM '||p_tablename;
EXECUTE IMMEDIATE sqlstr into v_count; --could by 'using v_count' check syntax for this
INSERT INTO audit_table(table_name,total_count,status,time_stamp)
VALUES(p_tablename,v_count,p_status,SYSTIMESTAMP);
COMMIT;
end;
end;
you can elaborate on this creating additional procedure checking differences in total_count on same table at same time.
Now call this procedure before starting your insert-delete- on your table make sure you put the parameters correct eg p_status => 'begin procedure'
and call it again after your commit in your procedure.
Hope this helps you out
Erwin
Similar Messages
-
SQL merge and after insert or update on ... for each row fires too often?
Hello,
there is a base table, which has a companion history table
- lets say USER_DATA & USER_DATA_HIST.
For each update on USER_DATA there has to be recorded the old condition of the USER_DATA record into the USER_DATA_HIST (insert new record)
- to have the history of changes to USER_DATA.
The first approach was to do the insert for the row trigger:
trigger user_data_tr_aiu after insert or update on user_data for each rowBut the performance was bad, because for a bulk update to USER_DATA, there have been individual inserts per records.
So i tried a trick:
Instead of doing the real insert into USER_DATA_HIST, i collect the USER_DATA_HIST data into a pl/sql collection first.
And later i do a bulk insert for the collection in the USER_DATA_HIST table with stmt trigger:
trigger user_data_tr_ra after insert or update on user_dataBut sometimes i recognize, that the list of entries saved in the pl/sql collection are more than my USER_DATA records being updated.
(BTW, for the update i use SQL merge, because it's driven by another table.)
As there is a uniq tracking_id in USER_DATA record, i could identify, that there are duplicates.
If i sort for the tracking_id and remove duplicate i get exactly the #no of records updated by the SQL merge.
So how comes, that there are duplicates?
I can try to make a sample 'sqlplus' program, but it will take some time.
But maybe somebody knows already about some issues here(?!)
- many thanks!
best regards,
FrankHello
Not sure really. Although it shouldn't take long to do a test case - it only took me 10 mins....
SQL>
SQL> create table USER_DATA
2 ( id number,
3 col1 varchar2(100)
4 )
5 /
Table created.
SQL>
SQL> CREATE TABLE USER_DATA_HIST
2 ( id number,
3 col1 varchar2(100),
4 tmsp timestamp
5 )
6 /
Table created.
SQL>
SQL> CREATE OR REPLACE PACKAGE pkg_audit_user_data
2 IS
3
4 PROCEDURE p_Init;
5
6 PROCEDURE p_Log
7 ( air_UserData IN user_data%ROWTYPE
8 );
9
10 PROCEDURE p_Write;
11 END;
12 /
Package created.
SQL> CREATE OR REPLACE PACKAGE BODY pkg_audit_user_data
2 IS
3
4 TYPE tt_UserData IS TABLE OF user_data_hist%ROWTYPE INDEX BY BINARY_INTEGER;
5
6 pt_UserData tt_UserData;
7
8 PROCEDURE p_Init
9 IS
10
11 BEGIN
12
13
14 IF pt_UserData.COUNT > 0 THEN
15
16 pt_UserData.DELETE;
17
18 END IF;
19
20 END;
21
22 PROCEDURE p_Log
23 ( air_UserData IN user_data%ROWTYPE
24 )
25 IS
26 ln_Idx BINARY_INTEGER;
27
28 BEGIN
29
30 ln_Idx := pt_UserData.COUNT + 1;
31
32 pt_UserData(ln_Idx).id := air_UserData.id;
33 pt_UserData(ln_Idx).col1 := air_UserData.col1;
34 pt_UserData(ln_Idx).tmsp := SYSTIMESTAMP;
35
36 END;
37
38 PROCEDURE p_Write
39 IS
40
41 BEGIN
42
43 FORALL li_Idx IN INDICES OF pt_UserData
44 INSERT
45 INTO
46 user_data_hist
47 VALUES
48 pt_UserData(li_Idx);
49
50 END;
51 END;
52 /
Package body created.
SQL>
SQL> CREATE OR REPLACE TRIGGER preu_s_user_data BEFORE UPDATE ON user_data
2 DECLARE
3
4 BEGIN
5
6 pkg_audit_user_data.p_Init;
7
8 END;
9 /
Trigger created.
SQL> CREATE OR REPLACE TRIGGER preu_r_user_data BEFORE UPDATE ON user_data
2 FOR EACH ROW
3 DECLARE
4
5 lc_Row user_data%ROWTYPE;
6
7 BEGIN
8
9 lc_Row.id := :NEW.id;
10 lc_Row.col1 := :NEW.col1;
11
12 pkg_audit_user_data.p_Log
13 ( lc_Row
14 );
15
16 END;
17 /
Trigger created.
SQL> CREATE OR REPLACE TRIGGER postu_s_user_data AFTER UPDATE ON user_data
2 DECLARE
3
4 BEGIN
5
6 pkg_audit_user_data.p_Write;
7
8 END;
9 /
Trigger created.
SQL>
SQL>
SQL> insert
2 into
3 user_data
4 select
5 rownum,
6 dbms_random.string('u',20)
7 from
8 dual
9 connect by
10 level <=10
11 /
10 rows created.
SQL> select * from user_data
2 /
ID COL1
1 GVZHKXSSJZHUSLLIDQTO
2 QVNXLTGJXFUDUHGYKANI
3 GTVHDCJAXLJFVTFSPFQI
4 CNVEGOTDLZQJJPVUXWYJ
5 FPOTZAWKMWHNOJMMIOKP
6 BZKHAFATQDBUVFBCOSPT
7 LAQAIDVREFJZWIQFUPMP
8 DXFICIPCBCFTPAPKDGZF
9 KKSMMRAQUORRPUBNJFCK
10 GBLTFZJAOPKFZFCQPGYW
10 rows selected.
SQL> select * from user_data_hist
2 /
no rows selected
SQL>
SQL> MERGE
2 INTO
3 user_data a
4 USING
5 ( SELECT
6 rownum + 8 id,
7 dbms_random.string('u',20) col1
8 FROM
9 dual
10 CONNECT BY
11 level <= 10
12 ) b
13 ON (a.id = b.id)
14 WHEN MATCHED THEN
15 UPDATE SET a.col1 = b.col1
16 WHEN NOT MATCHED THEN
17 INSERT(a.id,a.col1)
18 VALUES (b.id,b.col1)
19 /
10 rows merged.
SQL> select * from user_data_hist
2 /
ID COL1 TMSP
9 XGURXHHZGSUKILYQKBNB 05-AUG-11 10.04.15.577989
10 HLVUTUIFBAKGMXBDJTSL 05-AUG-11 10.04.15.578090
SQL> select * from v$version
2 /
BANNER
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 - Production
NLSRTL Version 10.2.0.4.0 - ProductionHTH
David -
Repairing permissions before and after updating software
What is the reason to repair permissions before and after updating software? This may sound like a stupid question to many of you, but I am new to computers and I am trying to learn how and why of some of the things of my PowerBook. I installed some updates without repairing permissions. Did I install some software updates the wrong way? Thank you.
This is a topic which will draw as many emphatic for and against responses as overnight shut down or not, defrag or not, optimise or not, and so on.
I agree with Neil. I believe that OS X has progressed sufficiently that repair permissions has become redundant and so I do not do it on any regular basis.
Some folk may refer you to an Apple Support Article 303602. That Article in its 4 May 2006 version, titled "Top 10 Tips to Keep Your Mac in Top Form" suggested Repair Permissions should be done "after upgrading or installing new software". The Article was however revised on 15 May 2006 to be titled "Top Tips to Keep Your Mac in Top Form" and the item on Repair Permissions [along with two other recommended maintenance tips] was removed. It is my view that the conclusion to be drawn here is that Apple no longer considers Repair Permissions to be a required maintenance procedure.
Many users have adopted a "Repair Permissions" mantra for a cure-all over several years. I dropped it sometime in 10.3.
But, to each his own.
HTH
TiPB 867 Mac OS X (10.4.6) -
Oracle Alert: Access before and after update values of a table column
We have a requirement where a notification needs to be sent when 'END_DATE' attribute (column in a table X) is set, in an Oracle Applications form.
I have defined an Event based Oracle Alert which fires 'On Update' of the table X.
Could anyone please let me know as how to access the value of 'END_DATE' before and after update (i.e :new.END_DATE and :old.END_DATE) in the sql query of the alert.
The need to use the before update and after update values of the attribute 'END_DATE' is that if we add the condition END_DATE is not null, the alert is sent even if any other attrbutes are updated in the Oracle form which is not the intended behavior.
Appreciate any help.
ThanksHi
use selectionlistener for your first table then add clientlistener and serverlistener so that you will get the rows on click in back bean.
then get second table vo and and create and add row for that view object. add partial target to refresh your second table from back bean.
on click of save call commit operation. -
Everyone: This time repair your permissions before and after 10.4.8 update
Hello All,
Just a reminder for all those who are updating to OS 10.4.8.
While many people do ignore all the recommendations that we provide and still come through fine, please do consider observing the following to minimize your problems.
To insure the best chance of success, please consider downloading the Combo Updater for your computer instead of using Software update.
For PowerPC Mac's, this would be:
http://www.apple.com/support/downloads/macosx1048comboupdateppc.html
For Intel Macs, this would be:
http://www.apple.com/support/downloads/macosx1048comboupdateintel.html
The benefit of using the Combo Updater, is that it replaces all system files that have been changed since the last major release (in this case since 10.4.0).
So, if you have any system files that have become corrupted, the Combo Updater will very likely over-write those, and spare you the headaches that come from updating an operating system that has problems that just haven't come to the surface yet.
In many cases, you can have problems that have not come to the surface, and the "Delta" or Software update method will bring them out to bite you. The reason for this, is because the Delta / Software Update version only changes files that have changed since 10.4.7. And, it works more in a "patch" fashion. So, if there is a problem in one of the files being patched, then the update will cause you some major headaches.
Going with the larger "Combo" update over-writes almost all the System files with clean versions instead of just making patches. So, it is frequently much more successful.
Now, with that said, before you update, you should make sure your permissions are all set properly. If your permissions are wrong, then your update will likely have trouble.
So, go into "Disk Utility" in the Applications --> Utilities folder and repair your permissions.
Start by selecting your hard drive on the left window of Disk Utility. Then, go down and click on the "Repair Permissions" button. Once it's completed, then exit Disk Utility.
Now, it is also extremely important to make sure all running programs are closed before you install any system update. So, go ahead and restart your computer.
Restarting will make sure that all programs are closed, and that nothing weird is stuck in memory before you install.
If you have anti-virus programs running, then disable or deactivate them first (you don't want them interpreting this as unauthorized modification or it might prevent certain files from being updated).
Now, with your computer freshly restarted, install the Combo updater you downloaded.
When prompted, click on the "Restart" button when prompted.
Now, the computer will startup, but sit at the spinning wheel for several minutes. It will eventually restart again on it's own. And, finally, it will start-up all the way and you'll be back at your desktop.
Now, immediately go back to Disk Utility and repair permissions as you did in the previous step. You will likely see several permissions that have been repaired. In my case, I had dozens of CoreAudio, Widgets, and other permissions that needed repair. Once permissions have been repaired, go ahead and restart one last time. This makes sure that everything is set and then cleaned-up.
Once it reboots, begin using it and enjoy.
Now, this may sound like a lot. But, it really is simple. It just reads like a lot of stuff.
And, of course, you are free to ignore this and just install it however you like. Many people have their own ideas here. And, many people say you don't have to do anything to prepare. But, for those that have had huge problems in the past, these extra steps will usually save you the major headaches that tons of people inevitably have with every new update.
Anyway, I hope this helps to save at least a few of you any problems. If you don't agree with the ideas above, just ignore it and do as you like.
But, if you want a little extra piece-of-mind and a better chance at success, then please consider exercising this extra caution.
And, for the record, I have updated my machines to 10.4.8 (within minutes of the update being available) and it is working perfectly smooth on my systems.
I hope you find this helpful.mhunter, thanks and good that you take the time and effort again to remind everyone that it does take an effort to do a major OS update, to ensure maximum stability.
So far my 10.4.8 Update is a-okay, and I have had many trouble-free updates since installing 10.4
I too practice rigourously and "religiously" before and after an OS or Security Update, but I normally use Software Update, equally successful:
1. Before Startup, UNPLUG all external devices, left only keyboard, mouse and internet connection, unless they are all wireless.
2. Startup, disable NAV if any, Repair Disk Permission. Restart again, Repair Permission again.
3. Do Software Update
4. Restart, Repair Permission
5. Shutdown, plug everything back
6. Startup Mac, use Mac
So far these steps have been keeping all my macs both at home and at work very very stable and healthy.
Maybe, just maybe if everyone here, all mac users were to follow these steps, yes they can be a hassle, yes they can take up some time, but then there will be less less complains and "blasts" at Apple, just because perhaps themselves have been too careless or negligance in performing updates.
Cheers -
I'm unable to update my apps or download new apps to my Iphone. When I try I get a message "An unknown error has occurred". It was happening before and after the last OS upgrade. I've done a hard reboot with no effect. Any suggestions???
Have either of you had any luck with this issue. It began happening to me today when I was trying to purchase music on iTunes. I have purchased music and games in the past and have had no problem. Any help would be appreciated.
-
Triggers before and after update
Hi
I would like to add triggers before and after update for the following code. I would be thankful if someone give some guidance
update per_all_people_f a
set start_date = (select min(effective_start_date)
from per_all_people_f a1
where a1.person_id = a.person_id)
where person_id in (1114,115);Thanks
annaHi
I was unable to answer you. I agree with Peter . Also i want to add
that in HRMS you should check what triggers are already on that table and be carefull with creating your own one. With your own trigger you can influence on some application logic you know.
( And i hope that is a table first of all :) - but as i know _F at the end of table name means table )
T -
Difference between Before INSERT and After INSERT trigger?
What is difference between Before INSERT and After INSERT triggers? Can anyone give me a simple example from SCOTT schema for both of these triggers.
The documentation gives a good explanation have you looked at....
http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_triggers.htm#sthref1175 -
Data Loading(Before and After Image)
I heard that a datasource which has both "Before and After Image " ,then the data can be sent directly to the infocube or from the DSO to the Infocube but where as
If a datasource supports after image then first it has to be loaded to the DSO and then to the Infocube ,
My question is how to know the image types of the datasource ?Hi Ravi,
Check in ROOSOURCE tables in ECC. You can find the behvariaour options in DELTA field, so based on this table we can say will it support Cube/ODS.
Delta Only Via Full Upload (ODS or InfoPackage Selection)
A ALE Update Pointer (Master Data)
ABR Complete Delta with Deletion Flag Via Delta Queue(Cube-Comp)
ABR1 Like Method 'ABR' But Serialization Only by Requests
ADD Additive Extraction Via Extracto (e.g. LIS Info Structures)
ADDD Like 'ADD' But Via Delta Queue (Cube-Compatible)
AIE After-Images Via Extractor (FI-GL/AP/AR)
AIED After-Images with Deletion Flag Via Extractor (FI-GL/AP/AR)
AIM After-Images Via Delta Queue (e.g. FI-AP/AR)
AIMD After-Images with Deletion Flag Via Delta Queue (e.g. BtB)
CUBE InfoCube Extraction
D Unspecific Delta Via Delta Queue (Not ODS-Compatible)
E Unspecific Delta Via Extractor (Not ODS-Compatible)
FIL0 Delta Via File Import with After-Images
FIL1 Delta Via File Import with Delta Images
NEWD Only New Records (Inserts) Via Delta Queue (Cube-Compatible)
NEWE Only New Records (Inserts) Via Extractor (Cube-Compatible)
O
ODS ODS Extraction
X Delta Unspecified (Do Not Use!) -
How to covert before and after image details from logdump to SQL
Hi,
Through logdump,i am able to retrieve below before and after image details for an update statement.
Instead of below ascii format output, i need to know the complete sql statement before update and after update.
Is there any command to covert below output to readable SQL sentence?
2012/09/26 02:30:16.999.659 FieldComp Len 300 RBA 2528
Name: TEST.TESTTABLE
Before Image: Partition 4 GU m
5e50 86f5 af70 9660 b6fa 785c e34f 8881 0497 9507 | ^P...p.`..x\.O......
799f 2ee2 6399 d539 ea92 90de 828b 83d9 adc9 c8c4 | y...c..9............
ca87 9632 7136 a5fc 826f 8cc7 6ddd 7f8a e02e 816a | ...2q6...o..m......j
6ac4 739a 8011 5068 068a 4553 4937 93e7 cc5a d3d3 | j.s...Ph..ESI7...Z..
6a2b 2540 3be9 1df7 6d0c 0f17 d795 efd4 e0c5 dae9 | j+%@;...m...........
a488 a757 7c07 78a4 5f2a 1330 d2bb 5a05 7075 6b95 | ...W|.x._*.0..Z.puk.
529c f681 97d8 df6f 58d5 37dc e36d 8bc0 19d5 c7f0 | R......oX.7..m......
Bad compressed block, found length of 34549 (x86f5), RBA 2528
Logdump 2335 >n
Hdr-Ind : E (x45) Partition : . (x04)
UndoFlag : . (x00) BeforeAfter: A (x41)
RecLength : 300 (x012c) IO Time : 2012/09/26 02:30:16.999.659
IOType : 15 (x0f) OrigNode : 255 (xff)
TransInd : . (x01) FormatType : R (x52)
SyskeyLen : 0 (x00) Incomplete : . (x00)
AuditRBA : 24567 AuditPos : 4268948
Continued : N (x00) RecCount : 1 (x01)
2012/09/26 02:30:16.999.659 FieldComp Len 300 RBA 2947
Name: TEST.TESTTABLE
After Image: Partition 4 GU m
5e50 86f5 af70 9660 b6fa 785c e34f 8881 0497 9507 | ^P...p.`..x\.O......
799f 2ee2 6399 d539 ea92 90de 828b 83d9 adc9 c8c4 | y...c..9............
ca87 9632 7136 a5fc 826f 8cc7 6ddd 7f8a e02e 816a | ...2q6...o..m......j
6ac4 739a 8011 5068 068a 4553 4937 93e7 cc5a d3d3 | j.s...Ph..ESI7...Z..
6a2b 2540 3be9 1df7 6d0c 0f17 d795 efd4 e0c5 dae9 | j+%@;...m...........
a488 a757 7c07 78a4 5f2a 1330 d2bd 5a05 7075 6b95 | ...W|.x._*.0..Z.puk.
529c f681 97d8 df6f 58d5 37dc e36d e8b8 19d5 1af0 | R......oX.7..m......
Bad compressed block, found length of 34549 (x86f5), RBA 2947From the reference guide:
*FORMATSQL*
Valid for Extract
Use the FORMATSQLparameter to output data in external SQL format, instead of the default
Oracle GoldenGate canonical format. FORMATSQLgenerates SQLstatements (INSERT, UPDATE,
DELETE) that can be applied to both SQLand Enscribe tables by utilities other than Oracle
GoldenGate Replicat.
NOTE Do not use FORMATSQL if the data will be processed by the Replicat process.
Replicat expects the default canonical format. Do not use FORMATSQLif
FORMATASCIIor FORMATXMLis being used.
A FORMATSQL statement affects all extract files or trails defined after it.
Default output
Without options, FORMATSQLtransactions are output as follows, in comma-delimited format:
● The begin-transaction indicator, B.
● The timestamp at which the transaction was committed.
● The sequence number of the transaction log in which the commit was found.
● The relative byte address (RBA) of the commit record within the transaction log.
● The SQL statements.
● The commit indicator, C.
● A newline indicator.
Every record in a transaction is contained between the begin and commit indicators. Each
combination of commit timestamp and RBA isunique. You can customize the output
format with optional arguments.
Default See “Default output”
Syntax FORMATSQL [<option>] [, ...] -
Detecting Before and After Field Images
Is there a way within ADDT to find the value of screen fields prior to update? I've tried using the custom trigger BEFORE and STARTER events; BEFORE is too late, the field is already changed, STARTER is too early, the field value is NULL.
I don't believe using straight PHP is an option either because I believe ADDT changes the names of the fields for occurence purposes.
I would like to produce a detail log of the fields that change. Comparing them before and after seems like the only way.Heya,
I've really been having a hard time trying to understand exactly what it is you are trying to do. I read your post a few times and caught this line:
I would like to produce a detail log of the fields that change.
For this I would go about it by using an update record SB combined with insert into two tables SB. This would update the record of the user and also insert the info into a second table, the 'changed fields' table...
In 'changed fields' table insert logged in users id via session variable, a timestamp, and whatever fields were updated in the update record SB form and there you'd have it - your record updated and a detailed record of what fields were updated and when with complete backlog for all users. Query 'changed fields' table sorted by user id and you'd see who changed what when.
Hope that helps! -
Why there is implicit commit before and after executing DDL Statements
Hi Guys,
Please let me know why there is implicit commit before and after executing DDL Statements ?
Regards,
sushmitaHelyos wrote:
This is because Oracle has design it like this.Come on Helyos, that's a bit of a weak answer. :)
The reason is that it makes no sense to update the structure of the database whilst there is outstanding data updates that have not been committed.
Imagine having a column that is VARCHAR2(50) that currently only has data that is up to 20 characters in size.
Someone (person A) decides that it would make sense to alter the table and reduce the size of the column to varchar2(20) instead.
Before they do that, someone else (person B) has inserted data that is 30 characters in size, but not yet committed it.
As far as person B is concerned that insert statement has been successful as they received no error, and they are continuing on with their process until they reach a suitable point to commit.
Person A then attempts to alter the database to make it varchar2(20).
If the database allowed that to happen then the column would be varchar2(20) and the uncommitted data would no longer fit, even though the insert was successful. When is Person B going to find out about this? It would be wrong to tell them when they try and commit, because all their transactions were successful, so why should a commit fail.
In this case, because it's two different people, then the database will recognise there is uncommitted transactions on that table and not let person B alter it.
If it was just one person doing both things in the same session, then the data would be automatically committed, the alter statement executed and the person informed that they can't alter the database because there is (now) data exceeding the size they want to set it to.
It makes perfect sense to have the database in a data consistent state before any alterations are made to it, hence why a commit is issued beforehand.
Here's something I wrote the other day on the subject...
DDL's issue a commit before carrying out the actual action
As long as the DDL is syntactically ok (i.e. the parser is happy with it) then the commit is issued, even if the actual DDL cannot be executed for another reason.
Example...
We have a table with some data in it...
SQL> create table xtest as select rownum rn from dual;
Table created.
SQL> select * from xtest;
RN
1We then delete the data but don't commit (demonstrated by the fact we can roll it back)
SQL> delete from xtest;
1 row deleted.
SQL> select * from xtest;
no rows selected
SQL> rollback;
Rollback complete.
SQL> select * from xtest;
RN
1
SQL> delete from xtest;
1 row deleted.
SQL> select * from xtest;
no rows selectedSo now our data is deleted, but not committed, what if we issue a DDL that is syntactically incorrect...
SQL> alter tab xtest blah;
alter tab xtest blah
ERROR at line 1:
ORA-00940: invalid ALTER command
SQL> rollback;
Rollback complete.
SQL> select * from xtest;
RN
1... the data can still be rolled back. This is because the parser was not happy with the syntax of the DDL statement.
So let's delete the data again, without committing it, and issue a DDL that is syntactically correct, but cannot execute for another reason (i.e. the database object it refers to doesn't exist)...
SQL> delete from xtest;
1 row deleted.
SQL> select * from xtest;
no rows selected
SQL> truncate table bob;
truncate table bob
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> rollback;
Rollback complete.
SQL> select * from xtest;
no rows selectedSo, there we have it. Just because the statement was syntactically correct, the deletion of the data was committed, even though the DDL couldn't be performed.
This makes sense really, because if we are planning on altering the definition of the database where the data is stored, it can only really take place if the database is in a state where the data is where it should be rather than being in limbo. For example, imagine the confusion if you updated some data on a column and then altered that columns datatype to be a different size e.g. reducing a varchar2 column from 50 character down to 20 characters. If you had data that you'd just updated to larger than 20 characters whereas previously there wasn't, then the alter table command would not know about it, would alter the column size and then the data wouldn't be valid to fit whereas the update statement at the time didn't fail.
Example...
We have a table that only allows 20 characters in a column. If we try and insert more into that column we get an error for our insert statement as expected...
SQL> create table xtest (x varchar2(20));
Table created.
SQL> insert into xtest values ('012345678901234567890123456789');
insert into xtest values ('012345678901234567890123456789')
ERROR at line 1:
ORA-12899: value too large for column "SCOTT"."XTEST"."X" (actual: 30, maximum: 20)Now if our table allowed more characters our insert statement is successful. As far as our "application" goes we believe, nay, we have been told by the database, we have successfully inserted our data...
SQL> alter table xtest modify (x varchar2(50));
Table altered.
SQL> insert into xtest values ('012345678901234567890123456789');
1 row created.Now if we tried to alter our database column back to 20 characters and it didn't automatically commit the data beforehand then it would be happy to alter the column, but then when the data was committed it wouldn't fit. However the database has already told us that the data was inserted, so it can't go back on that now.
Instead we can see that the data is committed first because the alter command returns an error telling us that the data in the table is too big, and also we cannot rollback the insert after the attempted alter statement...
SQL> alter table xtest modify (x varchar2(20));
alter table xtest modify (x varchar2(20))
ERROR at line 1:
ORA-01441: cannot decrease column length because some value is too big
SQL> rollback;
Rollback complete.
SQL> select * from xtest;
X
012345678901234567890123456789
SQL>Obviously, because a commit statement is for the existing session, if we had tried to alter the table column from another session we would have got
SQL> alter table xtest modify (x varchar2(20));
alter table xtest modify (x varchar2(20))
ERROR at line 1:
ORA-00054: resource busy and acquire with NOWAIT specified
SQL>... which is basically saying that we can't alter the table because someone else is using it and they haven't committed their data yet.
Once the other session has committed the data we get the expected error...
ORA-01441: cannot decrease column length because some value is too bigHope that explains it -
Hi there.
I have a string of text as such:
I want to use GREP to insert a "*" (asterisk) before and after each bold part. Can I do that with GREP?
(if asterisk is a problem, I can use a different character)
Any help would be appreciated.Hi Schmaltzkopf,
try this:
Have fun -
Compare BEFORE and AFTER image in replicat
Do any of You experts know how to make the following code smaller?
...,p_kolonner=@STRCAT("ID='",@IF(@COLTEST(BEFORE.ID,PRESENT),BEFORE.ID,""),"'>'",@IF(@COLTEST(ID,PRESENT),ID,""),"'¤",
"OBSOLETED_ON='",@IF(@COLTEST(BEFORE.OBSOLETED_ON,PRESENT),BEFORE.OBSOLETED_ON,""),"'>'",@IF(@COLTEST(OBSOLETED_ON,PRESENT),OBSOLETED_ON,""),"'¤",
"SMRT_ID='",@IF(@COLTEST(BEFORE...The actual parameter would look like:
P_KOLONNER: ID=''>'11531'¤OBSOLETED_ON=''>''¤SMRT_ID=''>'1'¤SM_SMID=''>'2011X0074-00'¤SMT_ID=''>''...
This code is part of the params section of a sqlexec in a replicat file where I want to concatenate before and after images of a table into one parameter. I have to replace all NULLs with '' or the whole string evaluates to NULL when one of the columns are NULL. I have a procedure receiving the parameter.
How do I write this code shorter? I have to use less code to accomplish the same thing.Hi Yosemite:
You're right, the correct term is "Key Fields", in the previous post I made a mistake when referring to it as "Key Part", I'm sorry for the confusion.
Anyway, it is not clear to me if you managed to solve the problem or if you're still struggling with your data loads, if this is the case, Could you please elaborate?
-Which is the data source you are working with?
-Did you map the ROCANCEL field both to the 0STORNO and 0RECORDMODE InfoObjects?
-Are you using Addition or Overwrite on the Update Rules/Transformation Rules to the DSO?
-Have you applied any relevant SAP Note to fix this issue?
In case you have not read the blog by Swapna Gollakota, take a look at it, you might find it useful.
How does a datasource communicates "DELTA" with BW?
/people/swapna.gollakota/blog/2007/12/27/how-does-a-datasource-communicates-delta-with-bw
Regards,
Francisco Milán.
Edited by: Francisco Milan on Oct 29, 2010 12:31 PM -
Count before and after to certain occurance.
I am trying to count the amount of units studied before and after a certain Course was taken.
So ID 1 did PREP in 2013 in the first period and has and also had done a unit in 2009 so reult be before prerp count 1
ID 2 did PREP in 2012 first period and also an OTHER course in the same period as well as a OTHER in period 2. So when a PREP course appear in the same period and year as an OTHER course I would like it to count it as AFTER Prep.(see below(so when equal count as after PREP))
ID 3 has done one unit before before PREP which is in 2011 and 2 Units after the first PREP course.
I attepted this with not in and in statments basic I know but to no luck.
Any help is greatly appreciated.
Thanks
CREATE TABLE DAN_DIRK_2
(ID VARCHAR2(8),
YEAR VARCHAR2(8),
PERIOD VARCHAR2(8),
COURSE VARCHAR2(12),
UNIT VARCHAR2(12));
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (1,'2013','SP1','PREP','PLI');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (1,'2009','SP4','OTHER','DRI');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (2,'2012','SP1','OTHER','FER');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (2,'2012','SP2','OTHER','AQW');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (2,'2012','SP1','PREP','FGV');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (3,'2011','SP1','OTHER','GVW');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (3,'2012','SP2','PREP','FER');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (3,'2013','SP1','OTHER','FSW');
INSERT INTO DAN_DIRK_2 (ID, YEAR,PERIOD,COURSE,UNIT) VALUES (3,'2013','SP1','PREP','FGH');
GIVES:
ID
YEAR
PERIOD
COURSE
UNIT
1
2013
SP1
PREP
PLI
1
2009
SP4
OTHER
DRI
2
2012
SP1
OTHER
FER
2
2012
SP2
OTHER
AQW
2
2012
SP1
PREP
FGV
3
2011
SP1
OTHER
GVW
3
2012
SP2
PREP
FFR
3
2013
SP1
OTHER
FSW
3
2013
SP1
PREP
FGH
WANT:
ID
BEFORE
AFTER
1
1
0
2
0
2
3
1
2Chloe_19 wrote:
Get an Error
ORA-32033: unsupported column aliasing
32033. 00000 - "unsupported column aliasing"
*Cause: column aliasing in WITH clause is not supported yet
*Action: specify aliasing in defintion subquery and retry
Error at Line: 1 Column: 8
Am using version:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi
because you use 10g, try this :
WITH tt AS (
select 1 ID, 2013 YR, 'SP1' PERIOD, 'PREP' COURSE, 'PLI' UNIT from dual union all
select 1, 2009, 'SP4', 'OTHER', 'DRI' from dual union all
select 2, 2012, 'SP1', 'OTHER', 'FER' from dual union all
select 2, 2012, 'SP2', 'OTHER', 'AQW' from dual union all
select 2, 2012, 'SP1', 'PREP', 'FGV' from dual union all
select 3, 2011, 'SP1', 'OTHER', 'GVW' from dual union all
select 3, 2012, 'SP2', 'PREP', 'FFR' from dual union all
select 3, 2013, 'SP1', 'OTHER', 'FSW' from dual union all
select 3, 2013, 'SP1', 'PREP', 'FGH' from dual ),
tt2 AS (
SELECT t.ID,
min(t.YR) minyr,
min(replace(t.PERIOD,'SP','')) KEEP(DENSE_RANK FIRST ORDER BY T.YR) minpr
FROM tt t
WHERE t.COURSE = 'PREP'
GROUP BY t.ID)
SELECT ID,
NVL(COUNT(BEF),0) BEFORE,
NVL(COUNT(AFT),0) AFTER
FROM(
SELECT t1.ID,
(CASE WHEN t1.YR = t2.minyr AND replace(t1.PERIOD,'SP','')= t2.minpr AND t1.course='PREP' THEN NULL
WHEN t1.YR = t2.minyr AND replace(t1.PERIOD,'SP','')= t2.minpr AND t1.course!='PREP' THEN NULL
WHEN t1.YR < t2.minyr THEN -1
WHEN t1.YR = t2.minyr AND replace(t1.PERIOD,'SP','')<= t2.minpr THEN -1
END) BEF,
(CASE WHEN t1.YR = t2.minyr AND replace(t1.PERIOD,'SP','')= t2.minpr AND t1.course='PREP' THEN NULL
WHEN t1.YR = t2.minyr AND replace(t1.PERIOD,'SP','')= t2.minpr AND t1.course!='PREP' THEN 1
WHEN t1.YR > t2.minyr THEN 1
WHEN t1.YR = t2.minyr AND replace(t1.PERIOD,'SP','')>= t2.minpr THEN 1
END) AFT
FROM tt t1
LEFT JOIN tt2 t2
ON t2.id = t1.id
GROUP BY ID
ORDER BY 1
Maybe you are looking for
-
I currently have iPhoto '08 version 7.1.5 and need to update. However, will I loose any of my saved calendars or books?
-
Report for Archived data by using exicutable program.
Hi, In already existed Zreport data is fetching from table like below. SELECT belnr bewtp budat lfbnr lfpos FROM ekbe INTO TABLE it_ekbe WHERE bewtp IN ('R' , 'Q') "Only IRs
-
No internet with netctl-ifpluged albeit internet is connected
I bought an external usb ethernet adaptor for my Dell XPS13 It is recognized by the system and I can manually get it up with ip link: λ ip link 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default link/loopb
-
Jdbc:oracle:thin:@ service name too long
I am going to use jdbc:oracle:thin:@ as my connection. but my service name is too long.... is that any ways to include the long service name? Thanks!
-
System recovery fails on Satellite A30
Im trying to restore my gfriends laptop form the disks supplied. I get about 5% and it fails lots of writing happens the highlights of which are below: Error number: (36000) Message: A General Exception occured Version: 7.00 Command line arguments: -