jump to navigation

XML Publisher and Out of Memory Errors October 30, 2007

Posted by Tipster in Oracle, PeopleSoft, PeopleTools, XML Publisher.
2 comments

I’m getting a lot of comments on the XML Publisher posts about ‘Out of Memory’ errors. I’ve not experienced this myself so can’t give a fix or workaround, but wondered whether anyone else had hit this issue and found a resolution?

Doing a bit of digging there are a number of suggestions, none of them relate to the PeopleSoft implementation of XMLP however so I’m unconvinced by any solution in particular.

There’s a Tools patch out for this issue (8.48.06 and up contains the fix), so check your version of Tools:
http://www.peoplesoft.com/psp/portprd/CUSTOMER/CRM/c/C1C_MENU.C1_SOLN_SUMMARY.GBL?page=C1_SOLN_SUMMARY&SETID=SHARE&SOLUTION_ID=201046967

There’s a suggestion to change a parameter for XMLP (I guess this would be on the Process Defn or more likely the Process Type in PeopleSoft):
http://forums.oracle.com/forums/thread.jspa?threadID=568832&tstart=0&messageID=2116283

There’s a suggestion to create a config file (it is not delivered) to specify a temporary directory for processing large files:
http://asun.ifmo.ru/docs/XMLP/help/en_US/htmfiles/B25951_01/T421739T422152.htm

And there’s also a suggestion that a patch will fix it:
http://www.oracle.com/technology/products/xml-publisher/docs/AboutXMLP562.htm

If I was troubleshooting it and was already on 8.48.06 or greater, I’d probably try the parameter followed by the config file.

If anyone has encountered this error and fixed it, it’d be great if you posted a comment to let us know the resolution.

Why go for BEA? October 13, 2007

Posted by Tipster in Oracle, PeopleSoft.
add a comment

It seems BEA has rejected Oracle’s approach, although that reaction didn’t save PeopleSoft from their clutches, and 13% of BEA is already owned by an Oracle friendly investor.  By the sound of things Oracle has been stalking BEA for years, but why?

Are they after Weblogic (the Web Server) or Tuxedo (the middleware), or the revenue base?  Does SAP use any BEA products?

I don’t know the Oracle world like I do the PeopleSoft one, but I thought Oracle usually trod the path of using open source technology with some in-house extensions for OC4J / Oracle App Server. What does Weblogic/Tuxedo offer that they don’t already have? I can understand going for PeopleSoft, Seibel etc for the strength of their HR and CRM products – amongst other things – but is this an admission that BEAs Middleware and Web Server products are superior to Oracles?

Grey Sparling also have a piece on it here.

SAP to acquire Business Objects? October 9, 2007

Posted by Tipster in Oracle, PeopleSoft.
2 comments

It seems that SAP is going to acquire Business Objects, the Business Intelligence software vendor.

I wonder what this’ll mean for PeopleSoft / Oracle.  Was this a response to Oracle buying Hyperion (used by many clients as a reporting solution for SAP)?

It’s also an interesting move as Business Objects owns Crystal Decisions (makers of Crystal Reports) which is of course used by some PeopleSoft clients as a reporting solution.

An Alternative way of writing Effdt clauses October 7, 2007

Posted by Tipster in Oracle, PeopleSoft, SQL.
5 comments

I’ve covered the RANK analytic function before but neglected to mention a useful application for it, and that is for rewriting Effdt and Effseq clauses more efficiently.

The usual way to return the job row (this could be any table, I’m just picking job as a common example) that’s effective for each Employee at a specific date is probably something similar to this:

SELECT emplid, empl_rcd, effdt, effseq
  FROM ps_job j
 WHERE j.effdt =
    (SELECT MAX (j1.effdt)
       FROM ps_job j1
      WHERE j1.emplid = j.emplid
        AND j1.empl_rcd = j.empl_rcd
        AND j1.effdt <= '10/AUG/2007')
   AND j.effseq =
    (SELECT MAX (j2.effseq)
       FROM ps_job j2
      WHERE j2.emplid = j.emplid
        AND j2.empl_rcd = j.empl_rcd
        AND j2.effdt = j.effdt)

Execution Cost = 3010, time = 1 sec.

SELECT emplid, empl_rcd, effdt, effseq
  FROM (
SELECT emplid, empl_rcd, effdt, effseq,
  RANK () OVER
       (PARTITION BY emplid, empl_rcd
            ORDER BY effdt DESC
                   , effseq DESC) rnk
           FROM ps_job
          WHERE effdt <= '10/AUG/2007') j
 WHERE rnk = 1

Execution Cost = 665, time = 78 msecs.

Not only is the code shorter and easier, the database execution cost is less than a quarter of the ‘standard’ method and the execution time is less than a tenth.

Explain plans and costs are obviously variable depending upon your environment, the tables and indexes and the volume of data; however it should be clear from the example above that there are sometimes quicker ways than the ‘standard’ method.

Lag and Lead September 21, 2007

Posted by Tipster in Oracle, PeopleSoft, SQL.
add a comment

I’ve previously looked at the RANK and DENSE_RANK analytic functions, so thought I’d expand a little by mentioning LAG (and LEAD).

Analytic Functions are extensions to Oracle SQL that enable common tasks to be accomplished faster than using large blocks of SQL or PL/SQL. They are apparently ‘under review by the ANSI SQL committee for inclusion in the SQL specification’, although whether this will ever happen or not is anyones guess.

The LAG function solves (at least for those of us on Oracle) the oft-encountered issue of retrieving data from a prior row.

(more…)

Outer Joins and Effdt June 26, 2007

Posted by Tipster in Oracle, PeopleSoft, PeopleTools, SQL.
7 comments

I was asked by one of our Junior Consultants the best method of outer joining to a table containing Effdt (which you’d want to do a Max Effdt sub-query on).

I provided a solution, but after pondering the issue further I realised there are a number of ways to do this.

For those not familiar with the problem, an Outer Join is a specific SQL statement where all rows from the first table are returned even if no corresponding row in the second table is found. Values from the second table are shown where they exist, defaulting to null when they do not. The issue arises as the second table has an effdt column, which usually necessitates a sub query (to find the row with the greatest effdt less than a supplied as of date). This would be a sub-query, and you can’t outer-join to a subquery.

So, which is the best solution?

(more…)

Updating existing data with the Rank May 2, 2007

Posted by Tipster in Oracle, PeopleSoft, SQL.
add a comment

In the post ‘Incrementing Counts in SQL’ I detailed a way of ranking rows within key values. This works fine in a select statement, so I was able to use that to insert data into an empty record.

The problem I faced today however, was that the data already existed in a table. I needed to update an existing column with the rank that each row had within the table (there had been multiple inserts into the table, and the rank needed recalculating).

I played around with the problem for a bit and couldn’t see a way of doing it (without a kludge like copying it out to another table and using the rank statement instead of selecting the column). Then it occurred to me that it could be achieved using the two step approach shown here. I wrote a quick App Engine to do it (a DoSelect with a SQL step inside) and it worked a treat. It took 4 minutes to run, and a smart colleague of mine with PL/SQL knowledge bettered me with this (which ran in 15 seconds):


%Execute(/)
DECLARE CURSOR c1 IS
SELECT x.keyname
, x.key1
, x.key2
, x.key3
, x.key4
, x.key5
, x.key9
, RANK () OVER (PARTITION BY x.keyname, x.key1 ORDER BY x.keyname, x.key1, x.key9, x.key2) rk
FROM recname x;
BEGIN FOR c1_rec IN c1 LOOP
UPDATE recname y
SET y.key3 = c1_rec.rk
WHERE y.keyname = c1_rec.keyname
AND y.key1 = c1_rec.key1
AND y.key2 = c1_rec.key2
AND y.key9 = c1_rec.key9;
END LOOP;
END;
/

The above code snippet includes the %Execute(/) command needed for running PL/SQL within an App Engine SQL Step.

Oracle’s Project X – What does it mean for a PeopleSoft user? April 18, 2007

Posted by Tipster in Fusion, Oracle, PeopleSoft.
add a comment

What is Project X?

There’s been a bit of talk today about Oracle’s Project X. It’s been bubbling around for a while, but now it has been officially announced as ‘Oracle Application Integration Architecture’ and – to paraphrase – it’s a method of joining together disparate ERP systems.

By purchasing Process Integration Packs (PIPs) clients will be able to connect systems – initially I’d imagine it would be PeopleSoft, Oracle e-Biz, Siebel and JDE, but other systems will no doubt be added in the fullness of time. This is, of course, a high visibility use of the much heralded SOA (Service Orientated Architecture) – one of the buzzwords you can’t avoid hearing in any Fusion discussion. I guess this is Oracle responding to customers saying ‘enough with the SOA/BPEL/XMLP tub-thumping, show me how it improves my business’.

What does it mean for PeopleSoft people?

Whenever Oracle come out with a big announcement, the first question for me is always ‘what does this mean for the PeopleSoft world’? After all, straight after the takeover Oracle announced that we’d all be forced to migrate to Fusion. Then we were going to be temporarily supported on our current ERPs before migrating. Next came Applications Unlimited, meaning we could hold fire a bit longer. Now, Oracle release a technology enabling us to not migrate to Fusion at all, but stay put and let the different ERPs communicate.

A cynic might wonder if they were having problems with Fusion. Or perhaps it’s all going swimmingly but they’re hearing that clients quite like their current systems and don’t want to move? Or are they just after the extra revenue stream PIP sales would bring before Fusion comes along?

Faster SQL Updates using ROWID April 7, 2007

Posted by Tipster in Oracle, PeopleSoft, SQL.
add a comment

Most UPDATE statements get written using the technique:

UPDATE <recname>
   SET <fieldname> = <field, expression or statement>
 WHERE <where clause>

However, if the value that you’re setting the field to is a fairly complex SQL statement of its own there may be a better way (particularly if you have an Oracle DB). You can take advantage of the fact that ROWID is the fastest way to locate a row (faster even than the primary key). Run the first bit of SQL to select the rowid of the row to update and the value to update it to, and then the second bit to run the updates. This can be done either as 2 SQL blocks or with an App Engine Step containing DoSelect and SQL actions.

(more…)

Incrementing Counts in SQL March 25, 2007

Posted by Tipster in Oracle, SQL.
2 comments

Fairly frequently (particularly during Data Migration when deriving new key values) you have to rank and number rows within a particular key value. For instance, Key1 may have three rows – and these should be given a value of 1, 2 & 3. Key 2 however may have a different number of values but these should start again from 1. Example shown in this table:

Value RowNum
Key1 1
Key1 2
Key1 3
Key2 1
Key3 1
Key3 2
Key3 3
Key3 4

The Rownum field can be achieved in Oracle using the following SQL:

SELECT <Key1>
, rank() over (partition by <Key1> order by <OrderField> )
FROM <recname> k

As well as the RANK() function, there is a DENSE_RANK() function. The latter doesn’t leave gaps when there is a tie, for example RANK may give the output 1,2,2,4 where DENSE_RANK would give 1,2,2,3. The highest rank value provided by a DENSE_RANK statement would be the number of unique values.

Follow

Get every new post delivered to your Inbox.

Join 131 other followers