Partiton before or after insert direct

Hi
I am using insert direct to load into another table.
I want to know whether it better to for partitoning my target table before or after.
The partion key for source and target are same.
Please give your views

>
there are moe than 400 partitions.
doing one partition is very difficult
is there any other way around
>
You can do it any way you want.
You haven't told us what Oracle version you are using, how much data you have, how many of the paritions you want to move to the new table, or why you are duplicating the data to begin with.
So how are we supposed to know the best way to do what you are trying to do.
Tell us what you are trying to accomplish. If you just want to replicate the table you could also just export and import it.
Doing a partition is usually easy - just write an anonymous block or procedure to generate and execute the INSERT INTO ... SELECT FROM statements for each partition.
That gives you control over things if you have to restart partway through.

Similar Messages

  • Before or After insert trigger on HR_API_TRANSACTION_VALUES

    I am on the termination page of SSHR and after entering the details when clcked on 'Next' the validations built in before / after insert trigger of HR_API_TRANSACTION_VALUES does not retrieve the data and the error 'No data found' is displayed.
    We do not have AME approval. When clicked on 'Next' it goes to the review page. When I do a select on the HR_API_TRANSACTION_VALUES the data do exists but the validation does not work.
    We have Oracle HRMS 11i with database as 11g.
    Please give a resolution at the earliest.

    you can use
    hr_transaction_api.set_varchar2_value
    or
    hr_transaction_api.set_number_value
    based on what type of value that you want to update

  • 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

  • I plug in my printer and I get a message that says, "the disk you inserted is not readable." It didn't do this before but after I installed a segate hardrive software. I have removed the segate hardrive software but the message still appears.

    I plug in my printer and I get a message that says, "the disk you inserted is not readable." It didn't do this before but after I installed a segate hardrive software. I have removed the segate hardrive software but the message still appears. What can I do to remove this error.

    Please read this whole message before doing anything.
    This procedure is a diagnostic test. It won’t solve your problem. Don’t be disappointed when you find that nothing has changed after you complete it.
    Third-party system modifications are a common cause of usability problems. By a “system modification,” I mean software that affects the operation of other software — potentially for the worse. The following procedure will help identify which such modifications you've installed. Don’t be alarmed by the complexity of these instructions — they’re easy to carry out and won’t change anything on your Mac. 
    These steps are to be taken while booted in “normal” mode, not in safe mode. If you’re now running in safe mode, reboot as usual before continuing. 
    Below are instructions to enter some UNIX shell commands. The commands are harmless, but they must be entered exactly as given in order to work. If you have doubts about the safety of the procedure suggested here, search this site for other discussions in which it’s been followed without any report of ill effects. 
    Some of the commands will line-wrap or scroll in your browser, but each one is really just a single line, all of which must be selected. You can accomplish this easily by triple-clicking anywhere in the line. The whole line will highlight, and you can then copy it. The headings “Step 1” and so on are not part of the commands. 
    Note: If you have more than one user account, Step 2 must be taken as an administrator. Ordinarily that would be the user created automatically when you booted the system for the first time. The other steps should be taken as the user who has the problem, if different. Most personal Macs have only one user, and in that case this paragraph doesn’t apply. 
    Launch the Terminal application in any of the following ways: 
    ☞ Enter the first few letters of its name into a Spotlight search. Select it in the results (it should be at the top.) 
    ☞ In the Finder, select Go ▹ Utilities from the menu bar, or press the key combination shift-command-U. The application is in the folder that opens. 
    ☞ Open LaunchPad. Click Utilities, then Terminal in the icon grid. 
    When you launch Terminal, a text window will open with a line already in it, ending either in a dollar sign (“$”) or a percent sign (“%”). If you get the percent sign, enter “sh” and press return. You should then get a new line ending in a dollar sign. 
    Step 1 
    Triple-click the line of text below on this page to select it:
    kextstat -kl | awk '!/com\.apple/{printf "%s %s\n", $6, $7}' | open -f -a TextEdit 
    Copy the selected text to the Clipboard by pressing the key combination command-C. Then click anywhere in the Terminal window and paste (command-V). A TextEdit window will open with the output of the command. If the command produced no output, the window will be empty. Post the contents of the TextEdit window (not the Terminal window), if any — the text, please, not a screenshot. You can then close the TextEdit window. The title of the window doesn't matter, and you don't need to post that. No typing is involved in this step.
    Step 2 
    Repeat with this line:
    { sudo launchctl list | sed 1d | awk '!/0x|com\.(apple|openssh|vix)|org\.(amav|apac|cups|isc|ntp|postf|x)/{print $3}'; sudo defaults read com.apple.loginwindow LoginHook; sudo crontab -l; } 2> /dev/null | open -f -a TextEdit 
    This time you'll be prompted for your login password, which you do have to type. Nothing will be displayed when you type it. Type it carefully and then press return. You may get a one-time warning to be careful. Heed that warning, but don't post it. If you see a message that your username "is not in the sudoers file," then you're not logged in as an administrator. 
    Note: If you don’t have a login password, you’ll need to set one before taking this step. If that’s not possible, skip to the next step. 
    Step 3
    { launchctl list | sed 1d | awk '!/0x|com\.apple|org\.(x|openbsd)/{print $3}'; crontab -l 2> /dev/null; } | open -f -a TextEdit 
    Step 4
    ls -1A /e*/{la,mach}* {,/}L*/{Ad,Compon,Ex,Fram,In,Keyb,La,Mail/Bu,P*P,Priv,Qu,Scripti,Servi,Spo,Sta}* L*/Fonts .la* 2> /dev/null | open -f -a TextEdit  
    Important: If you formerly synchronized with a MobileMe account, your me.com email address may appear in the output of the above command. If so, anonymize it before posting. 
    Step 5
    osascript -e 'tell application "System Events" to get name of every login item' | open -f -a TextEdit 
    Remember, steps 1-5 are all copy-and-paste — no typing, except your password. Also remember to post the output. 
    You can then quit Terminal.

  • Mutating table exception on trigger with After Insert but not with before

    Hi
    I need to maintain some constraint on the table to have only one row for values of the columns but not by primary key constraint.
    Because in case of primary key the insert would fail and the rest of the operation would be discontinued, I cannot change in the somponent that inserts the row so I have to prevent that on the table I have.
    I created a before insert trigger on the table which checks if any row exists in the table with same column values as the one being inserted. if found I delete the rows and let the insert happen (w/o raising any error). if the rows do not exist then the insert shall be continued.
    I read at place that modifying the dame table in the trigger body shall raise a mutating table exception, but I donot get the exception when the trigger is fired.
    Just when I change the trigger to after insert trigger then the nutating table exception is thrown.
    Is it the right behavior i.e. the Before insert trigger does not raise the exception and only after insert does that, since I could not find the example for before insert triggers throwing such exception so I think it is better to confirm it before finalizing the implementation.
    Thanks
    Sapan

    sapan wrote:
    Hi Tubby
    I cannot user unique constraint because that would raise an exception upon violation and the third party component that is inserting in the table would fail.
    That component does some other tasks as well after this insert and if an exception is raised then those tasks would not be performed.
    Also I cannot change the component to ignore this exception.Well then, you're in a bit of a pickle.
    I'm guessing the trigger you have been working on isn't "safe". By that i mean that it doesn't account for multi-user scenarios. You'll need to serialize access to the data elements in question and implement some sort of locking mechanism to ensure that only 1 session can work with those values.
    After you work out how to do that it sounds as though you would be better served using an INSTEAD OF trigger (you'd need to implement this on a view which is made off of your base table).
    Here's one way you can work on serializing access to your table on a relatively fine grained level (as opposed to locking the entire table).
    Re: possible to lock stored procedure so only one session may run it at a time?
    Cheers,

  • Resultset after insertion is the same before insertion

    hi guys, i get an updatable resultset from a connection then used it to insert a new row but the result set doesn't chane after insertion, i mean the no of rows before insertion is the same after insertion and also the data, this is the code prove what i say
              int currentRow = resultset.getRow();
              display(resultset);
              resultset.moveToInsertRow();
              for (int i = 0; i < fields.size(); i++) {
                updateCurrentRow(resultset, fields.getField(i));
              resultset.insertRow();
              display(resultset);the display function body is
            int currentRow = res.getRow();
            res.first();
            while (true)
              System.out.println("CountyCode= " + res.getInt(1));
              System.out.println("CountyName= " + res.getString(2));
              if (!res.next())
                break;
            res.absolute(currentRow);Please help me
    N.B.
    the type of resultset after creation it is res.getConcurrency() == ResultSet.CONCUR_UPDATABLE?????
    Thanks for your efforts

    thnaks for your reply, but when i used
    ownInsertsAreVisible() method; returned true, that is
    mean that the driver and DB supports the updating of
    reultset after insertion. but this is not real at my
    case? that was strange. if you have any comment please
    do,just checking the row is in fact being inserted into the database? i mean you can't see it right away but you can see it later right?
    if the row is being inserted and the ownInsertsAreVisible() returns true then there are two possible scenarios.
    1) the cursor type of your result set does not support that method, meaning the method is true in some cases but not yours... for example your query might have a join or something which makes it not possible for the result set do be fully cognizant of changes. and sometimes there are database specific cursors that have to specified as part of your query in a proprietary way to get the "right" cursor. you will need to investigate the docs for your database to figure out if any of this is true.
    2) the meta data is lying.

  • 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!)

  • Need some help after inserting CMS system

    Hi on my site ive inserted an CMS system from Cushy. It all work that isnt the problem. The problem is that my page is a mess now.. The only thing ive addes is a cms code so im hoping the solution isnt hard to do.
    There are three pages that are complete changed.
    The home page
    http://www.vakantiewoningeninsuriname.nl/index.html
    The text colomn right under is moved.How can i place this back?
    on http://www.dorff.nl/ you can see how it was before i add the CMS.
    The next page is:
    http://www.vakantiewoningeninsuriname.nl/bezienswaardighedenparamaribo.html
    You can see there is a lot extra space between the head and the text. And you see that the text is not only at the right side anymmore.
    This is how it should be:
    http://www.dorff.nl/bezienswaardighedenparamaribo.html
    The same goes for this page:
    http://www.vakantiewoningeninsuriname.nl/prijzen.html
    And this is how it have to be:
    http://www.dorff.nl/prijzen.html
    Hope you can help, thank you for looking..
    Regards Brian

    Dear Nancy,
    Thank you for your response,
    I will try to explain again what is wrong. On my site you see this page:
    http://www.vakantiewoningeninsuriname.nl/prijzen.html
    Problem is that the picture below is on the right side of the page instead of the left like the other pictures.
    On:
    http://www.dorff.nl/prijzen.html
    You can see how it should looks.. Pictures to the left and text on the right. Dont know what happened when im adding the Cuschy CMS. Hope you can see what is wrong.
    Regards Brian
    Date: Wed, 2 May 2012 13:04:14 -0600
    From: [email protected]
    To: [email protected]
    Subject: Need some help after inserting CMS system
        Re: Need some help after inserting CMS system
        created by Nancy O. in Dreamweaver - View the full discussion
    Change this:
    Prijzen
    Bij ons kunt u terecht met elk budget. Wij hebben woningen voor mensen die een langere tijd blijven maar ook voor vakantiegangers. Daarom hebben wij verschillende prijzen gehanteerd.
      to this: <!Begin CushyCMS>
    h2. Prijzen
    Bij ons kunt u terecht met elk budget. Wij hebben woningen voor mensen die een langere tijd blijven maar ook voor vakantiegangers. Daarom hebben wij verschillende prijzen gehanteerd.
    <!end CushyCMS>   Nancy O.Alt-Web Design & PublishingWeb | Graphics | Print | Media  Specialists  http://alt-web.com/http://twitter.com/altweb http://alt-web.blogspot.com/
         Replies to this message go to everyone subscribed to this thread, not directly to the person who posted the message. To post a reply, either reply to this email or visit the message page: http://forums.adobe.com/message/4374962#4374962
         To unsubscribe from this thread, please visit the message page at http://forums.adobe.com/message/4374962#4374962. In the Actions box on the right, click the Stop Email Notifications link.
         Start a new discussion in Dreamweaver by email or at Adobe Forums
      For more information about maintaining your forum email notifications please go to http://forums.adobe.com/message/2936746#2936746.

  • Using Database Change Notification instead of After Insert Trigger

    Hello guys! I have an after insert trigger that calls a procedure, which in turn is doing an update or insert on another table. Due to mutating table errors I declared the trigger and procedure as autonomously transactional. The problem is, that old values of my main tables are inserted into the subtable since the after insert/update trigger is fired before the commit.
    My question is how can I solve that and how could I use the change notification package to call my procedure? I now that this notification is only started after a DML/DDL action has been commited on a table.
    If you could show me how to carry out the following code with a Database Change Notification I'd be delighted. Furthermore I need to know if it suffices to set up this notification only once or for each client seperately?
    Many thanks for your help and expertise!
    Regards,
    Sebastian
    declare
    cnumber number (6);
    begin
    select count(*) into cnumber from (
    select case when (select date_datum
        from
          (select f.date_datum,
            row_number() over (order by f.objectid desc) rn
          from borki.fangzahlen f
          where lng_falle      = :new.lng_falle
          and int_fallennummer = :new.int_fallennummer
          and lng_schaedling   = :new.lng_schaedling
          and date_datum       > '31.03.2010'
        where rn=1) < (select date_datum
        from
          (select f.date_datum,
            row_number() over (order by f.objectid desc) rn
          from borki.fangzahlen f
          where lng_falle      = :new.lng_falle
          and int_fallennummer = :new.int_fallennummer
          and lng_schaedling   = :new.lng_schaedling
          and date_datum       > '31.03.2010'
        where rn=2) then 1 end as action from borki.fangzahlen
            where lng_falle      = :new.lng_falle
            and int_fallennummer = :new.int_fallennummer
            and lng_schaedling   = :new.lng_schaedling
            and date_datum       > '31.03.2010') where action = 1;
    if cnumber != 0 then
    delete from borki.tbl_test where lng_falle = :new.lng_falle
    and int_fallennummer = :new.int_fallennummer
    and lng_schaedling   = :new.lng_schaedling
    and date_datum       > '31.03.2010';
    commit;     
    pr_fangzahlen_tw_sync_sk(:new.lng_falle, :new.int_fallennummer, :new.lng_schaedling);

    It looks like you have an error in line 37 of your code. Once you fix that the problem should be resolved.

  • GREP: How can I place a (for example) "*" before and after bold text with GREP?

    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

  • Before or After Triggers

    Hi,
    I have a doubt on functioning of Before or After Triggers.
    Here is an example of it:
    I created a trigger on EMP table
    create or replace trigger tri11 before insert or update or delete on emp for each row
    begin
    if to_char(sysdate,'dy')='fri' then
    raise_application_error(-20101,'No Transactions should be happend on Friday');
    end if;
    end;
    According to the trigger created it has to fire before any event is happening and it should not allow any insertions or updates or deletion on FRIDAY.
    And that is working fine.
    I changed the trigger to fire on After Insert or update or delete....
    create or replace trigger tri11 after insert or update or delete on emp for each row
    begin
    if to_char(sysdate,'dy')='fri' then
    raise_application_error(-20101,'No Transactions should be happend on Friday');
    end if;
    end;
    Here according to this trigger it has to fire after any event is happening .....but still it is not allowing me to perform any insertions or updates or deletion on FRIDAY.
    And showing me the error message as below:
    SQL> update emp set sal = 11000;
    update emp set sal = 11000
    ERROR at line 1:
    ORA-20101: No Transactions should be happend on Friday
    ORA-06512: at "SCOTT.TRI11", line 3
    ORA-04088: error during execution of trigger 'SCOTT.TRI11'
    Can anyone please explain me the difference.
    Thanks.

    All triggers must be fired synchronously with the triggering statement. The statement and all triggers that are fired as the result of the statement must be atomic-- they must all succeed or all fail. It doesn't matter whether it is a before or after statement trigger that throws the exception-- in either case, the entire statement will fail and thus be rolled back.
    Justin

  • AFTER INSERT TIGGER, ora-01403: no data found error

    Hi all,
    I'm trying to create a fairly simple trigger which fires after an insert on a table.
    The trigger is based on a function, defined within a package. The function is as follows...
    FUNCTION check_contract_length (V_playerId IN NUMBER)
    RETURN BOOLEAN
    IS
    months NUMBER;
    months2 NUMBER;
    BEGIN
    SELECT months_between(contract_end, contract_start), contract_length
    INTO months, months2
    FROM player
    WHERE playerId = v_playerId;
    IF months <> months2 THEN
    RETURN (true);
    END IF;
    RETURN (false);
    END check_contract_length;The trigger operates when an insert is made on to the player table, it as defined as follows...
    CREATE OR REPLACE TRIGGER play_ins_con
    AFTER INSERT ON player
    FOR EACH ROW
    DECLARE
    isover BOOLEAN;
    BEGIN
    IF INSERTING THEN
    isover := player_constr_pkg.check_contract_length(:new.playerId);
    IF isover THEN
    RAISE_APPLICATION_ERROR(-30001, 'Contract length incorrect');
    END IF;
    END IF;
    END play_ins_con;My problem is, is that every time I try to insert a row into the player table, the trigger fires and produces a "ora-01403: no data found" error. I was under the impression that as the trigger fires after an insert, this shouldn't be a problem.
    I'm also aware that this constraint can probably be implemented using a CHECK constraint, however it would be a learning curve for me to work it out this way.
    Any help would be much appreciated!!
    Cheers guys.

    I'm also aware that this constraint can probably be implemented using a CHECK constraint,
    however it would be a learning curve for me to work it out this way.Starting out by doing stuff the wrong way only increases the learning curve when it comes to doing things the right way. A check constraint is definitely the best way of doing it. However, if you must do it with a trigger this is the way to go:
    CREATE OR REPLACE TRIGGER play_ins_con BEFORE INSERT ON player
    FOR EACH ROW
    BEGIN
        IF months_between(:NEW.contract_end, :NEW.contract_start) <> :NEW.contract_length
        THEN
            RAISE_APPLICATION_ERROR(-30001, 'Contract length incorrect');
        END IF;
    END play_ins_con;
    /Incidentally, as CONTRACT_LENGTH is wholly derivable from the other columns your table structure is obviously insufficiently normalised.
    Also, note that only errors between -20999 and -20000 are reserved for our use. Any other number may be used by Oracle for its own purposes.
    Cheers, APC

  • 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
    2

    Chloe_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

  • Before and after triggers

    just can somebody clarify
    when we say
    create or replace trigger tn before/after insert/update/delete for each row/statement
    i just want to know what i can do with a before trigger which i cannot do with a after trigger and viceversa

    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica">quote:</font><HR>Originally posted by sushant prabhu:
    i just want to know what i can do with a before trigger which i cannot do with a after trigger and viceversa<HR></BLOCKQUOTE>
    Before row triggers can modify column values (:new.column := value) before the row is originally written to disk. I don't think after row triggers can modify :new values. Before row triggers can't see the row's rowid, at least not for inserts, but after row triggers always can.
    Statement triggers can modify the triggering table, but row triggers can't. Statement triggers can't tell what rows are touched, but row triggers are called once per row touched and can see :old and :new values for that row.
    null

Maybe you are looking for