Question

Oracle Trigger executing stored procedure after insert

Asked by: hypermac

Hello Gurus!
I am working with an application that updates a FACT table in an oracle schema.  I want to add a trigger to that FACT table that executes a stored procedure that moves the data from the preliminary FACT table to the final table in my star schema after the INSERT is complete.  I am expecting millions of records.  My stored procedure works correctly when executed by itself.  The trigger appears to be causing the application to 'hang' when inserted records into the preliminary FACT table.  I have tested the process without the trigger and it is successful and fast.  Since I am only an Oracle coder 'wannabe', I'm sure that I am making a rookie mistake.  Your assistance is greatly appreciated!

Trigger code is as follows:

CREATE OR REPLACE TRIGGER TR_TEST
AFTER INSERT OR UPDATE
ON MCCCH01.PER_FACT
REFERENCING NEW AS NEW OLD AS OLD
declare
 pragma autonomous_transaction;
 
 
BEGIN
  SP_INSERT_FACT_HFM_ACT_PER_FIN;
END;
/

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2006-06-29 at 09:45:36ID21903719
Tags

oracle

,

trigger

,

procedure

,

insert

,

stored

Topic

Databases Miscellaneous

Participating Experts
3
Points
500
Comments
40

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Pragma
    Could you explain and write to me a small example of pragma.
  2. Oracle Triggers
    I am having trouble creating Triggers in Oracle. I cannot seem to get the trigger to compile, but i cannot see what is wrong with the code. Any Ideas? DROP TRIGGER module_value; CREATE TRIGGER module_value AFTER UPDATE OR INSERT ON assessment FOR EACH ROW DECLARE total_valu...
  3. Oracle Grant total schema access to user
    I have a user (user A) in oracle who has a lot of objects under their schema, I wish to give access to these tables to another user (user B). I want to avoid the following if possible 1. creating public synomyns for all the objects under user A. 2. having to grant User B acc...
  4. What is the meaning of schema at oracle?
    Dear all I would like to know what is the meaning of schema at oracle? Is schema having relationship with user? is each of users are having their own schema? I am confused what's meaning of schema and user. Is somebody help ? Thanks a lot
  5. Star / Snowflake schema
    Hi Can anyone tell me the differences between a star schema an a snowfle schema? and does one apply to datawarehouse?

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: sathyagiriPosted on 2006-06-29 at 10:04:04ID: 17011371

Does your stored procedure modify any data in PER_FACT table?

 

by: dave4dlPosted on 2006-06-29 at 10:04:21ID: 17011377

make  sure you are not creating an infinite loop

 

by: dave4dlPosted on 2006-06-29 at 10:05:50ID: 17011388

if SP_INSERT_FACT_HFM_ACT_PER_FIN modifies MCCCH01.PER_FACT it will trip the trigger recursively (and loop infinitely)

 

by: hypermacPosted on 2006-06-29 at 10:51:17ID: 17011869

The INSERTlooks up the keys in the PER_FACT in the associated dimension table and does one CASE statement during the INSERT.  The final FACT table is loaded with natural dimension names instead of keys and a three char month is changed to the numeric equivalent.  

Yes, I have apparently created an infinite loop.  So...is it possible to accomplish what I am trying to do.  Basically, execute the SP after the INSERT has completed?

It would be great if someone could explain the infinite loop?  I've got to learn somewhere and don't hesitate to point me to a good ref book.

Thanks

 

by: sathyagiriPosted on 2006-06-29 at 10:56:35ID: 17011913

Can you post your Stored procedures logic here?

Also refer to http://asktom.oracle.com/~tkyte/Mutate/index.html

 

by: hypermacPosted on 2006-06-29 at 11:01:22ID: 17011959

I'm right in the middle of some changes but here it is....

CREATE OR REPLACE PROCEDURE SP_INSERT_FACT_HFM_ACT_PER_FIN IS
tmpVar NUMBER;
/******************************************************************************
   NAME:       SP_INSERT_FACT_HFM_ACTUALS_PER_FIN
   PURPOSE:    

   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        5/16/2006          1. Created this procedure.

   NOTES:

   Automatically available Auto Replace Keywords:
      Object Name:     FDM_INSERT_FACT_ACTUALS_PER
      Sysdate:         5/16/2006
      Date and Time:   5/16/2006, 2:20:37 PM, and 5/16/2006 2:20:37 PM
      Username:         (set in TOAD Options, Procedure Editor)
      Table Name:       (set in the "New PL/SQL Object" dialog)

******************************************************************************/
PROGRAM_ID  VARCHAR2(30) := 'SP_INSERT_FACT_HFM_ACT_PER_FIN';

BEGIN
   

       CREATE_LOG(PROGRAM_ID,0,NULL,'Load SP_INSERT_FACT_HFM_ACT_PER_FIN - Program Started', SYSDATE, NULL);
             

             
        UPDATE FACT_HFM_ACTUALS_PER_FIN
        SET ACTIVE_FLAG = 'N',
        CURRENT_PERIOD = 'N'
        WHERE FACT_HFM_ACTUALS_PER_FIN.TIME_PERIOD = (SELECT DISTINCT LABEL FROM PER_PERIOD aa, PER_FACT bb
                                                                           WHERE bb.PERIODID = aa.ID)
        AND FACT_HFM_ACTUALS_PER_FIN.YEARS =  (SELECT DISTINCT LABEL FROM PER_YEAR aa, PER_FACT bb
                                                               WHERE bb.YEARID = aa.ID);
                                                             
        COMMIT;
        
        UPDATE FACT_HFM_ACTUALS_PER_FIN
        SET CURRENT_PERIOD = 'N'
        WHERE CURRENT_PERIOD = 'Y';
        
        COMMIT;
        
        
        INSERT INTO FACT_HFM_ACTUALS_PER_FIN
        (current_period,
        entity,
        account,
        cost_center,
        product_line,
        data_type,
        scenario,
        hfm_value,
        hfm_view,
        ICP,
        time_period,
        years,
        project,
        fy_period,
        account_type,
        default_currency,
        active_flag,
        amount)
        (select 'Y' AS CURRENT_PERIOD,
        af.label AS Entity,
        ah.label AS Account,
        al.label AS COST_CENTER,
        aj.label AS PRODUCT_LINE,
        am.label AS DATA_TYPE,
        ab.label AS Scenario,  
        ag.label AS Value,
        ae.label AS HFM_View,
        ai.label AS ICP,
        ad.label AS Period,  
        ac.label AS Year,
        ak.label AS PROJECT,
        CAST('20' || SUBSTR(ac.label,3,2) || CASE WHEN ad.label = 'Jan' THEN '01'
                                                              WHEN ad.label = 'Feb' THEN '02'
                                                              WHEN ad.label = 'Mar' THEN '03'
                                                        WHEN ad.label = 'Apr' THEN '04'
                                                        WHEN ad.label = 'May' THEN '05'
                                                        WHEN ad.label = 'Jun' THEN '06'
                                                        WHEN ad.label = 'Jul' THEN '07'
                                                        WHEN ad.label = 'Aug' THEN '08'
                                                        WHEN ad.label = 'Sep' THEN '09'
                                                        WHEN ad.label = 'Oct' THEN '10'
                                                        WHEN ad.label = 'Nov' THEN '11'
                                                        WHEN ad.label = 'Dec' THEN '12'
                                                               ELSE NULL
                                                                  END AS NUMBER) as FY_YEAR,
        ao.accounttype AS Account_Type,
        an.DEFAULT_CURR__NAME,
        'Y',
        aa.ddata AS AMOUNT
        FROM PER_FACT aa,
        PER_scenario ab,
        PER_year ac,
        PER_period ad,
        PER_view ae,
        PER_entity af,
        PER_value ag,
        PER_account ah,
        PER_icp ai,
        PER_custom1 aj,
        PER_custom2 ak,
        PER_custom3 al,
        PER_custom4 am,
        MD_ENTITY an,
        PER_ACCOUNT ao
        WHERE aa.scenarioid = ab.id
        AND aa.yearid = ac.id
        AND aa.periodid = ad.id
        AND aa.viewid = ae.id
        AND aa.entityid = af.id
        AND aa.valueid = ag.id
        AND aa.ACCOUNTID = ah.id
        AND aa.ICPID = ai.id
        AND aa.CUSTOM1ID = aj.id
        AND aa.CUSTOM2ID = ak.id
        AND aa.CUSTOM3ID = al.id
        AND aa.CUSTOM4ID = am.id
        AND aa.ENTITYID = an.id
        AND aa.accountid = ao.id
        );

        COMMIT;
        

CREATE_LOG(PROGRAM_ID,0,NULL,'SP_INSERT_FACT_HFM_ACT_PER_FIN - Completed Successfully', NULL, SYSDATE);      
      
      EXCEPTION
         WHEN OTHERS THEN
            CREATE_LOG('SP_INSERT_FACT_HFM_ACT_PER_FIN',SQLCODE,SQLERRM,'Raise Application Error - 20013');
       
            RAISE_APPLICATION_ERROR(-20013, SQLERRM);
      
END;
/

 

by: sathyagiriPosted on 2006-06-29 at 11:13:24ID: 17012058

Can you change your trigger definition to this and try

CREATE OR REPLACE TRIGGER TR_TEST
AFTER INSERT OR UPDATE
ON MCCCH01.PER_FACT
FOR EACH ROW
REFERENCING NEW AS NEW OLD AS OLD
declare
 pragma autonomous_transaction;
 
 
BEGIN
  SP_INSERT_FACT_HFM_ACT_PER_FIN;
END;
/

 

by: dave4dlPosted on 2006-06-29 at 11:14:25ID: 17012065

what is your insert into or update of MCCCH01.PER_FACT?

 

by: dave4dlPosted on 2006-06-29 at 11:15:55ID: 17012083

i mean please post the sql that does the insert or update

 

by: dave4dlPosted on 2006-06-29 at 11:28:03ID: 17012179

you may not need a trigger if you just want to always run this stored procedure after a specific insert or update statement you run.

Just make a script or stored procedure that executes the insert or update and then executes SP_INSERT_FACT_HFM_ACT_PER_FIN

 

by: hypermacPosted on 2006-06-29 at 11:49:35ID: 17012344

Thanks for the input.  Unfortunately a canned application generates and executes the INSERT script and I can not edit the SQL.  I need to ececute the SP after the INSERT is complete that's why I was hoping to make the trigger work!  Thoughts?

 

by: dave4dlPosted on 2006-06-29 at 12:06:05ID: 17012482

is FACT_HFM_ACTUALS_PER_FIN linked in any way to MCCCH01.PER_FACT?

from the code you posted for your stored proc i dont see how it could be creating an infinite loop (unless those tables were tied in some way, triggers,  etc).

I would take a step back and just try to make a very simple stored proc that inserts into some other temp table (created just for debugging purposes) with an insert statement that is as simple as possible.  If this works, slowly start changing this stored procedure (testing frequently) until it breaks.  This way you can tell which part of the procedure is causing the problems with the trigger.  If the trigger doesnt work right off with the simple stored proc then you can focus on modifying the trigger so it works (and let us know this so we might be able to zero in on the problem more quickly).

 

by: hypermacPosted on 2006-06-29 at 12:51:27ID: 17012860

PER_FACT and FACT_HFM_ACTUALS_PER_FIN are not linked in any way.  This is how I tested....

1.  Execute application that inserts into PER_FACT for small entity.  This creates 3637 records.
2.  Execute stored procedure and it inserts 3637 records into the FACT_HFM_ACTUALS_PER_FIN table.

Based on this I think the sp is fine.  But the trigger does appear to be looping!  Thoughts?

 

by: sathyagiriPosted on 2006-06-29 at 12:54:08ID: 17012892

Did you try changing your trigger definition to include FOR EACH ROW?

 

by: hypermacPosted on 2006-06-29 at 12:57:36ID: 17012930

No...I was afraid it would execute the sp after each row insert.  Wouldn't that be a major performance drain?  I'll give it a try using the recommended SQL above!  

 

by: hypermacPosted on 2006-06-29 at 13:05:36ID: 17013013

OK.... tried that and it continually loops through the data.  For exery record that is loaded into per_fact, that record and all previous records are loaded into FACT_HFM_ACTUALS_PER_FIN.  I would expect it needs to be a AFTER Statement trigger and now a row trigger.  Is there a way to determine when the insert is complete?  so I could use that as my event?  Thanks!

 

by: sathyagiriPosted on 2006-06-29 at 13:38:35ID: 17013320

I think your problem is with the SELECT statement from the PER_FACT table. This is the table on which you trigger is.

Try moving that update out of the SP. Should hopefully work.

 

by: hypermacPosted on 2006-06-29 at 13:46:02ID: 17013375

I'm lost...The update sets the current flag / active flag to 'N' which is needed.  The update has no impact on PER_FACT.  The insert happens after the update in the SP... there is no loop in the sp.  The INSERT scripts pulls the exact number of records that I expect so I don't see how it could be the Select or the Insert.  Since the SP executes successfully, I would think it's in how / when the trigger is executing the SP.

 

by: dave4dlPosted on 2006-06-29 at 13:50:26ID: 17013407

Hyper, have you followed the methodology I outlined above when i said:

""

I would take a step back and just try to make a very simple stored proc that inserts into some other temp table (created just for debugging purposes) with an insert statement that is as simple as possible.  If this works, slowly start changing this stored procedure (testing frequently) until it breaks.  This way you can tell which part of the procedure is causing the problems with the trigger.  If the trigger doesnt work right off with the simple stored proc then you can focus on modifying the trigger so it works (and let us know this so we might be able to zero in on the problem more quickly).

If so, let us know the results

 

by: hypermacPosted on 2006-06-29 at 13:58:54ID: 17013481

The stored procedure executes correctly without the trigger.  

 

by: dave4dlPosted on 2006-06-29 at 14:00:43ID: 17013494

yeah but it doesnt with the trigger

 

by: dave4dlPosted on 2006-06-29 at 14:03:03ID: 17013512

so i am suggesting that you start with a very simple stored proc.

Piece by piece build it into the procedure you want (testing after each piece) so you can tell exactly which piece of the stored proc is hanging

 

by: hypermacPosted on 2006-06-29 at 14:05:05ID: 17013528

OK... it doesn't seem like this will be solved quickly or easily today.  Can sometime at least tell me if this should be do-able?  I don't have a lot of time to waste on something that may never work.

Thanks

 

by: dave4dlPosted on 2006-06-29 at 14:05:31ID: 17013530

also put a period in before your slash

so the last three lines of your stored proc would become

  SP_INSERT_FACT_HFM_ACT_PER_FIN;
END;
.
/

 

by: dave4dlPosted on 2006-06-29 at 14:07:38ID: 17013544

it is doable so you are not wasting your time

 

by: hypermacPosted on 2006-06-29 at 14:12:35ID: 17013583

First... thanks... I don't mind doing the grunt work if people tell me I 'should' be able to do it.

Second...I added the period as recommended above and the SP doesn't compile...

Error =

PLS-00103: Encountered the symbol "." The symbol "." was ignored.

I'll be leaving this client until the 10th so I won't be able to test again until then!  Thanks for the assistance!

 

by: sathyagiriPosted on 2006-06-29 at 14:14:57ID: 17013605

Ok one last thing for today, after your insert into PER_FACT table, do you see any records at all being created in the
 FACT_HFM_ACTUALS_PER_FIN  table?



 

by: dave4dlPosted on 2006-06-29 at 14:15:40ID: 17013611

Which version of Oracle are you using?

 

by: hypermacPosted on 2006-06-29 at 14:22:30ID: 17013674

Oracle 10G

With the trigger above, using the 'Per Each Row', an insert was happening...PER_FACT had only 3700 records or so... when I killed it, FACT_HFM had over 78K records!  The loop!

 

by: dave4dlPosted on 2006-06-29 at 14:31:54ID: 17013744

check the content of those records, do all the records have the same values?

 

by: sathyagiriPosted on 2006-06-29 at 14:36:33ID: 17013777

Ok if you are using the for each row, modify your insert so  that it inserts only the modified row in to the FACT_HFM table (i.e) your select statement in the insert should select only one record from the PER_FACT table. You could use the :old or :new on  your where clause

 

by: MohanKNairPosted on 2006-06-29 at 23:07:41ID: 17015800

Remember a signle SQL statement that works on N records is much faster than N statements.

ROW LEVEL trigger is fired each time a row is inserted into table. The solution is to create a log table. This is a flat table, same structure as the original fact table, with no triggers or constraints or indexes. Periodically run the SP to move records from log table to fact table.

 

by: hypermacPosted on 2006-06-30 at 05:48:06ID: 17017380

I don't want to insert row by row.  I want to insert the entire table AFTER it has been commited to the PER_FACT table.   The SP needs to be executed immediately after the PER_FACT table has been loaded.  So... I need a trigger that exec the SP after the PER_FACT table has been successfully loaded.  So the question is how do I create a trigger that 1) 'knows' when the load to the PER_FACT is complete and 2) can use that event to trigger the execution of the SP.

 

by: sathyagiriPosted on 2006-06-30 at 06:06:38ID: 17017485

Ok then let's try debugging the SP.

Comment out the insert statement and just do a select count(1) into cnt from the per_fact with whatever where clause you are using for inserting.

Then do a DBMS_OUTPUT.PUT_LINE('Count is' || cnt);

Now perform the action that fires the trigger (table level)

See if the cnt displayed is the number you are expecting.

 

by: hypermacPosted on 2006-06-30 at 07:18:18ID: 17018066

OK.... so I don't understand why I need to debug the stored procedure when it works properly without the trigger.  The variable here is the trigger.  I have to put this on hold... as stated earlier I will not be back on-site until July 10th so I don't have the ability to do any testing until then.  Thanks!

 

by: MohanKNairPosted on 2006-07-03 at 20:32:04ID: 17034770

Declare a package variable and increment the variable

SQL> create package testvar is
  2  cnt number := 0;
  3  end;
  4  /

Package created.

CREATE OR REPLACE TRIGGER TR_TEST AFTER INSERT OR UPDATE ON MCCCH01.PER_FACT FOR EACH ROW
declare
pragma autonomous_transaction;
BEGIN
testvar.cnt := testvar.cnt+1;
if testvar.cnt=1000
then
testvar.cnt := 0;
--  Process data
end if;
END;
/

The package variable will be reset to 0 when a new Oracle session begins.

 

by: hypermacPosted on 2006-07-20 at 12:37:41ID: 17149114

Thanks... this looks promising.  Forgive my ignorance, but could you please explain setting the testvar.cnt = 1000 in the trigger?  I'll test this out as soon as I can get back into Oracle [client doing maintenance in DEV environment.....]

Thanks

 

by: MohanKNairPosted on 2006-07-20 at 20:23:26ID: 17151460

>> testvar.cnt := testvar.cnt+1;
>> if testvar.cnt=1000
>> then

The package variable testvar.cnt is initialized to 0 in package specification. This means when the package variable is used for the first time in a session its value will be 0.
Inside the trigger the package variable is incremented by 1
If the value of the package variable becomes 1000 THEN
                                      Re-initialize the value to 0
                                      Process that data for 1000 records in MCCCH01.PER_FACT table

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...