Monday, April 20, 2009

Oracle Single Sign-On and apex.oracle.com

Application Express on apex.oracle.com is now registered as a Partner Application for Oracle Single Sign-On. This means that you can now create demonstration and sample applications, hosted on apex.oracle.com, and have the users authenticate via the Oracle Single Sign-On Login Server.

Who is registered on Oracle.com? Well, if you have ever asked or answered a question on the wildly popular Oracle Application Express discussion forum on OTN, then you already have an account.

To enable SSO authentication to Oracle.com in your application on apex.oracle.com, simply follow these steps:

  1. Shared Components -> Authentication Schemes
  2. Click Create button
  3. Choose “Based on a pre-configured scheme from the gallery” and click Next
  4. Choose “Oracle Application Server Single Sign-On (Application Express Engine as Partner App)” and click Next
  5. Give it a name like SSO and click Create Scheme
  6. In the subsequent report of authentication schemes, click the “make current” link for your newly created SSO one
  7. Click the Make Current button on the confirmation page
  8. Go get a beer (or coffee or tea) to celebrate
It's that simple.

To see this in action, here's a very brief sample application with a public and non-public page, using SSO authentication.

Important note:  As of August 2012, SSO is no longer available on apex.oracle.com.

Wednesday, April 08, 2009

Cleaning Up

The architecture of Application Express is such that the database objects associated with a specific release all exist in a single schema. For the original Oracle HTML DB 1.5, all of the database objects existed in schema FLOWS_010500. As of the most recent version, Oracle Application Express 3.2, all of the database objects reside in schema APEX_030200.

When a new version of Application Express is installed, the following three actions take place:

  1. The new version is installed into a new schema (this happens the same whether it's a new installation or an upgrade installation).
  2. The meta data from the previous version is copied and sometimes transformed into the new schema.
  3. All of the public synonyms which were pointing at the "old" version are now redirected to the new version of Application Express.

The beauty of this architecture is if an error occurs during installation or during upgrade, it's easy to revert back to the previous installation, as documented here. Both an APEX 3.1 installation (in FLOWS_030100) and an APEX 3.2 installation (in APEX_030200) can exist in the Oracle database at the same time, and with only one version active. Understand, though, if you choose to rollback and remove the newer version of Application Express, all of the changes made in the newer version (instance settings, application changes, new workspaces, etc.) will not be propagated back to the old version of Application Express if you switch schemas.

Once you have successfully upgraded your instance of Application Express, tested all of the upgraded applications, and deem the upgrade successful, there is no reason to maintain the old version of Application Express. Not only does it take up space in your database, it leaves a fairly privileged database account in the database, and this could pose a security risk if compromised.

For apex.oracle.com, which currently has over 20,000 workspaces, I always install the new version of Application Express into it's own tablespace. I do not install Application Express into the default SYSAUX tablespace. Application Express 3.1 was installed into tablespace APEX_REL31. When I recently upgraded to Application Express 3.2, and after we ran successfully for a couple days, it was easy to clean up the old Application Express 3.1 by issuing:

DROP USER FLOWS_030100 CASCADE;
DROP TABLESPACE APEX_REL31 INCLUDING CONTENTS AND DATAFILES;

That's it! The privileged database user from the previous version is gone. All of the space on disk is reclaimed. And the newer version of Application Express 3.2 in APEX_030200 hums along just fine.


Note: There is one schema installed with Application Express, FLOWS_FILES, which persists across version upgrades. The sole purpose of this schema is to maintain uploaded files. You should never manually remove this schema unless you want to remove every facet of Oracle Application Express from your database. And if you really wanted to remove every trace of Application Express, I'd recommend using the apxremov.sql script anyway.



Considerations when dropping on Database 11g

If you're using Application Express with Oracle Database 11g (11.1.0.6 or greater), undoubtedly you had to enable Network Services so Application Express could send e-mail, use Web Services, etc. If you didn't do this, then you'll encounter errors like "ORA-24247: network access denied by access control list (ACL)" when APEX attempts to send e-mail or access any other network resource.

One important caveat to the instructions above - if you created an ACL for FLOWS_030100 (Application Express 3.1) and granted connect privileges to FLOWS_030100, after you upgrade to Application Express 3.2 , grant these same connect privileges on the existing ACL to APEX_030200, and you drop database user FLOWS_030100, the Network ACL will contain a dangling reference to FLOWS_030100 and will be invalid. What this means is that if you're running along just fine with an upgraded Application Express 3.2 and you drop FLOWS_030100, your delivery of e-mail may no longer work. Users will see error messages like "ORA-24247: network access denied by access control list (ACL)" in APEX_MAIL_LOG.MAIL_SEND_ERROR.

This situation happened to me over the weekend. After Application Express 3.2 was running for a month on our internal instance, the old FLOWS_030100 database user was finally dropped. Numerous issues were raised on Monday morning by workspace owners who said they could no longer send e-mail and they were seeing the error message "ORA-24247: network access denied by access control list (ACL)" in APEX_MAIL_LOG.MAIL_SEND_ERROR.

The only way I've discovered to rectify this situation is to manually drop the ACL reference to FLOWS_030100. I connected as SYS in SQL*Plus and ran:

exec dbms_network_acl_admin.delete_privilege('power_users.xml','FLOWS_030100',TRUE,'connect');


This underlying database issue, with the ACL privileges not being dropped when a database user is dropped, was filed as Bug 7493477 and is targeted to be fixed in Database 11gR2.

Friday, March 06, 2009

Oracle Application Express in the cloud

You may have heard a thing or two about cloud computing. Jason Straub, from the Oracle Application Express development team, recently blogged about using Oracle Application Express in the cloud - and how you can run APEX in the cloud for as cheap as 20 cents USD / hour.

http://jastraub.blogspot.com/2009/03/test-drive-oracle-application-express.html

There's a little bit of setup to use the Amazon.com Elastic Compute Cloud, but once that's behind you, you can easily stand up your own Oracle database in the cloud for a tiny amount of money. And, in my opinion, this just further demonstrates how the browser-based Oracle Application Express hosted development and deployment environment is so well suited to cloud computing.

Friday, February 27, 2009

Oracle Application Express 3.2 released

Today, Oracle Application Express 3.2 was made available for download off of the Oracle Technology Network.

If you go to http://apex.oracle.com, you'll find links to:

  1. The link to download Oracle Application Express 3.2
  2. The list of new features in Oracle Application Express 3.2
  3. New Oracle By Examples, including a an Oracle Forms to Oracle APEX OBE and a soon-to-be-released security OBE.

Thanks to the Oracle Application Express community for your continued support, ideas and enthusiasm.

Friday, February 20, 2009

Make all of your APEX applications run a bit faster

See the important update below

Interested in making your APEX applications run faster? I know this seems like an impossible and astonishing feat, and you'll soon be approaching page view execution times of zero, but you can squeeze even a little more throughput and scalability with this one small exercise. And this shouldn't cost you an extra cent.

As a lot of people know already, Oracle Application Express is essentially one big SQL and PL/SQL program. "Porting" of Oracle Application Express to other platforms is not necessary. It installs via SQL*Plus. It runs where PL/SQL does. And PL/SQL, truly, is a write-once-run-everywhere platform.

So how do you make a PL/SQL program run faster? Through native compilation of PL/SQL, of course. When you compile a module in PL/SQL, you are converting it to an intermediate form named system code (or bytecode). At runtime, this system code is interpreted. Execution of this program would be much faster if it were compiled natively and the interpretation step was bypassed altogether. This is analogous to the old days of taking an interpreted BASIC program and compiling it to a native program.

An excellent description of PL/SQL native compilation can be found in Oracle Database PL/SQL Language Reference. When PL/SQL native compilation was introduced in Oracle Database 9iR1 and 9iR2, I found it to be complicated and involved, and I think I was successful getting a small program to ncomp once (and only once). Here is the explanation from some poor guy who figured out all the steps to do this in 9iR2 on Windows. But in Oracle Database 11gR1, this is downright trivial.

My test below was done in an Oracle Database 11gR1 11.1.0.6 on Oracle Enterprise Linux on VMWare Server on a Windows Vista x-64 host. With all those layers of software, the performance difference at runtime could still be easily observed. Also, I did this with the soon-to-be-released Application Express 3.2. Wherever you see APEX_030200, replace it with the database user of your specific APEX release (e.g., APEX 3.1 = FLOWS_030100).

The database view DBA_PLSQL_OBJECT_SETTINGS provides information about the compiler settings for all stored objects in the database. Connect as SYS via SQL*Plus or SQL Developer and run the following query (remembering again to replace 'APEX_030200' if you're not running Application Express 3.2):

column plsql_optimize_level format 999
column plsql_code_type format a20
select count(*), o.object_type, s.plsql_optimize_level, s.plsql_code_type
from dba_objects o, dba_plsql_object_settings s
where o.object_name = s.name
and o.owner = 'APEX_030200'
and s.owner = o.owner
group by o.object_type, s.plsql_optimize_level, s.plsql_code_type
order by 2 asc


On my instance this returned:


COUNT(*) OBJECT_TYPE PLSQL_OPTIMIZE_LEVEL PLSQL_CODE_TYPE
---------- ------------------- -------------------- --------------------
12 FUNCTION 2 INTERPRETED
370 PACKAGE 2 INTERPRETED
362 PACKAGE BODY 2 INTERPRETED
19 PROCEDURE 2 INTERPRETED
1 TABLE 2 INTERPRETED
366 TRIGGER 2 INTERPRETED
4 TYPE 2 INTERPRETED

7 rows selected.


All PL/SQL objects are interpreted and have a PL/SQL optimization level of 2. You can alter the PL/SQL compiler optimization level via PLSQL_OPTIMIZER_LEVEL, but I encountered runtime errors in Application Express when I natively compiled with an optimizer level of 3. I don't know why, but I'm saving that for another day.

Recompiling all of these objects via native compilation can be done with three easy statements. Note: You should not do this while the APEX applications are actively being used, as these steps will recompile all of the objects in the schema and you could encounter object contention issues. Connect as SYS in SQL*Plus and run:

alter session set plsql_optimize_level = 2;
alter session set plsql_code_type = native;
exec dbms_utility.compile_schema('APEX_030200');



That's it! If you execute the query above, you should now see something like:

COUNT(*) OBJECT_TYPE         PLSQL_OPTIMIZE_LEVEL PLSQL_CODE_TYPE
---------- ------------------- -------------------- --------------------
12 FUNCTION 2 NATIVE
370 PACKAGE 2 NATIVE
362 PACKAGE BODY 2 NATIVE
19 PROCEDURE 2 NATIVE
1 TABLE 2 NATIVE
366 TRIGGER 2 NATIVE
4 TYPE 2 NATIVE

7 rows selected.



If you encounter errors and you want to revert back to what you had, run:

alter session set plsql_optimize_level = 2;
alter session set plsql_code_type = interpreted;
exec dbms_utility.compile_schema('APEX_030200');


But I think you'll be pleasantly surprised with the results and have no desire to revert back. In Database 11gR1, this has become a downright trivial exercise. And faster page views means greater throughput which means greater scalability on equivalent hardware. That's both green and economical.

Lastly, you might wonder if the hosted instance of Application Express at http://apex.oracle.com is running with natively compiled PL/SQL. It's not, but after we formally release Application Express 3.2, it will be. There's no reason not to.



Important Update

08-APR-2009: There's nothing like actually using and testing these features on a large-scale system. A few weeks ago, I had natively compiled the APEX engine on apex.oracle.com. But just this past week, we had to switch this back to interpreted. Some unexplained ORA-600 errors were being encountered which is being actively researched by the database development team.

Tuesday, February 17, 2009

Carl Backstrom - Oracle ACE

Thanks to the work of Sharon on our team, she was able fulfill one of the desires Carl Backstrom had expressed a couple times.

The Oracle ACE program was "designed to recognize and reward members of the Oracle Technology and Applications communities for their contributions to those communities. These individuals are technically proficient (when applicable) and willingly share their knowledge and experiences." This really epitomized Carl - he was always ready and willing to share his vast knowledge with any one.

Well, as luck would have it, the folks at the Oracle Technology Network decided that Oracle employees could no longer be awarded the ACE designation. And that bothered Carl a little bit, as he was a very active contributor to the community every day. It just would have been nice to receive that designation.

Thanks to Sharon's suggestion, this has now been achieved: http://forums.oracle.com/forums/profile.jspa?userID=354238

Wednesday, February 11, 2009

apex.oracle.com upgraded to Application Express 3.2

Today (Wednesday, 11-FEB-2009) I upgraded apex.oracle.com to Application Express 3.2.0.00.21. As our long time customers know, this is one of the last milestones in our cycle prior to production release.

You can go here for a brief introduction to the new features in Application Express 3.2. As you'll see, there are two primary themes - Forms Conversion and security. The Application Express 3.2 documentation is not staged yet, but the online help/documentation is current for APEX 3.2.

If you encounter odd behavior or you feel that something was not properly upgraded in your application, please feel free to report it on the APEX OTN discussion forum. We will watch this closely.

Thank you for all of your support.

Friday, November 21, 2008

Change is Coming....

Change is coming...and no, I'm not referring to the forthcoming change in Washington. I'm referring to Oracle Application Express.

Since the first supported release of Application Express (Oracle HTML DB 1.5), Application Express has been delivered as a supported feature of the Oracle Database, supporting database releases 9.2.0.3 and higher. So even though Oracle HTML DB 1.5 was delivered as a feature of the Oracle Database Release 10gR1, a customer could actually download it from the Oracle Technology Network, install it in their Oracle Database 9iR2 9.2.0.3, and be in a supported configuration.

For the forthcoming release of Oracle Application Express 3.2, which introduces Oracle Forms Conversion, the minimum database version will continue to be 9.2.0.3. But for Oracle Application Express 4.0, the minimum database version will be Oracle Database 10gR2 10.2.0.x - possibly even 10.2.0.4.

Thursday, November 13, 2008

What's up, DOAG?

It's pronounced "what's up, dog?"...or if you're a Cleveland Browns fan like I am, it's pronounced "what's up, Dawg?" (my thanks to Sergio for this play on words).

The conference of the German Oracle User's Groups, Deutsche Oracle-Anwendergruppe 2008 Konferenz + Ausstellung (DOAG), is happening Monday 01-DEC-2008 through Wednesday 03-DEC-2008 in Nürnberg, Germany. Here is the conference program in German and English. There are a fair number of presentations about Oracle Application Express, including mine about what's coming new in Oracle Application Express in 2009.

I'm looking forward to the entire conference. Maybe some of the local attendees can take us on a walking tour of the Nürnberger Christkindlesmarkt.

Saturday, November 01, 2008

Carl Backstrom Memorial Announcement

Please join the family in celebrating the life of Carl Backstrom

on Thursday, the sixth of November

two thousand and eight

at one o'clock in the afternoon

Orange Terrace Park

20010 Orange Terrace Park Parkway

Riverside, CA 92508



In lieu of flowers the family has set up a Memorial Fund
in behalf of Carl's daughter, Destany.


Donations to Carl's Memorial Fund can be made several ways:

Domestic wire transfers
Account Number 152460903
Citibank ABA Number 322271724
International wire transfers SWIFT Code: CITI US 33
Checks
Make payable to Susan Bailey (Carl's Mother)
Address: 3395 S. Jones Blvd #403
Las Vegas, NV 89146

“And in the end, it's not the years in your life that count. It's the life in your years.” - Abraham Lincoln





Carl Backstrom Memorial Annoucement
Get your own at Scribd or explore others:

Open Source Web Design

Maybe everyone else on the planet knew about OSWD other than me. Regardless, here goes...

My brother-in-law, Matt Wagner, recently asked me to help him with his Web site. This was an interesting proposition, because I have not invested that much time learning about proper Web design (I never had to - I'm a database guy and we always had Carl and Marc for that kind of stuff). So I took this as an opportunity to actually learn something and I embraced the challenge. My brother-in-law already had his domain name, and he had a rough idea about the layout and the content that he wanted to put on his Web site, but he didn't know the first thing about HTML or how to propagate this information out to GoDaddy.

The last conversation I had with Carl was a week ago and I wanted to get his feedback about what I had done with Matt's Web site. Here is what pointed Carl to. I was so proud of myself, having figured out how to make some practical use of styles and also my over-the-top use of the effects from MooTools. Let me tell you - Carl laughed and laughed. He said the colors were odd, there was no contrast with the font and the background, the effects were funny, and he encouraged me not to use Serif fonts ("just not in style"). He also told me, with a chuckle, that I should start practicing jQuery and forget MooTools.

Carl did point me to the Open Source Web Design site and told me to pick one. For someone like me, who is artistically and graphically challenged, this site is a wealth of excellent templates and ideas. Needless to say, my second attempt at this, which we're continuing to iterate upon, is much, much better.

Thursday, October 30, 2008

From Carl's Mother

Carl's sister Cyndi asked me to share this message from Carl's mother, Susan:


....a very sincere heartfelt thank you everyone for all the caring words coming our way from Carl's internet 'family'.. please know that your words are read and are a comfort to us at this terrible time... his sisters will be writing more later.

Love to all,

Carl's Mom .. Susan

Wednesday, October 29, 2008

Carl Backstrom = WYSIWYG


This posting isn't about Oracle Application Express. It's merely some simple thoughts about our good friend, Carl Backstrom.

I paid attention to the pages of postings on the APEX OTN discussion forum about Carl. Some are from people whom Carl helped once or twice. Others, Carl tirelessly helped many times. Very few of these people actually met Carl, yet they were affected by his death - he touched them in some positive way. I received e-mail from others who only met Carl once or twice, and even they admitted they were affected by this, and couldn't quite pinpoint why. Well...I'll tell you why.

Carl was the definition of WYSIWYG. There was no air about Carl. He was not pretentious in any way. He did not have an agenda. He was not artificial. He was very human and authentic. His omnipresent positive attitude and enthusiasm were sincere and infectious. He was someone you enjoyed being around, someone you wanted to be around. He possessed an intangible, endearing quality.

I enjoyed that Carl was ever so unassuming. If you met Carl for the first time, you might have thought that he's some nice casual fellow who also likes to be a skater in his spare time (turns out, he was a snowboarder). Little would you know that what underlaid his visage was one of the brightest, hardest-working, most creative and visionary minds on the planet when it comes to AJAX, JavaScript, Web 2.0, Web design, RIA - whatever you want to call it. I am not embellishing this fact.

Carl's greatest character flaw, as I see it, was that he could rarely if ever say "no" to someone who was seeking his help. He was always ready to assist someone, no matter who they were, no matter the size of the problem, big or small. What a wonderful "flaw" to have. It is something I can only hope to aspire to.

I shall miss him dearly.

Tuesday, October 28, 2008

Carl Backstrom

As has already been mentioned on the APEX OTN forum and other places on the Internet, our good friend and colleague, Carl Backstrom, passed away on Sunday, 26-OCT-2008.

I spoke with Carl's family last evening. I should have more details later this week, but his family is tentatively planning on a memorial service sometime next week in Riverside, CA. Additionally, his sister said that they're thinking of setting up a trust fund for Carl's daughter, in lieu of flowers or cards. I'll post these details as I get them.

Carl was simply a great guy who touched so many people in such a positive way.

Friday, October 24, 2008

Book for Oracle Application Express and Oracle Forms developers

As most folks already know, the next release of Application Express is 3.2. The primary (and almost sole) new feature in Application Express 3.2 will be Oracle Forms Conversion. This was discussed and demonstrated at Oracle Open World 2008 in San Francisco in September.

When I was at Oracle Open World 2008, I had the good fortune of meeting James Lumsden from Packt Publishing. As it turns out, Packt Publishing is starting a book on Oracle Application Express for Oracle Forms Developers. "It will be a title that shows Forms developers how to ‘get things done’ in Apex, in a practical hands-on way, but with regular cross-reference to their established development techniques, practices and approaches."

Why am I writing about this? Because Packt Publishing is interested in talking to you if you have a desire to contribute to this type of book. If you're interested in further exploring this opportunity, please contact James Lumsden at jamesl@packtpub.com.


* Note: I have no relationship with Packt Publishing. I have contributed to books from Wrox Press and Apress but never Packt, so I cannot give any positive or negative feedback.

Thursday, August 28, 2008

Application Express 3.1.2 Released

This afternoon we released Application Express 3.1.2. As for every patch set for Application Express, we released this in the form of a patch set on MetaLink (Patch Number 7313609) as well as a full release which can be downloaded from OTN. Thus:

  1. If you have Application Express 3.1 or 3.1.1 installed, you'll want to download the APEX 3.1.2 patch set and apply it.
  2. If you have Application Express 3.0 or earlier installed (all the way back to HTML DB 1.5), you'll want to download and install the entire APEX 3.1.2 release from OTN.
  3. If you don't have Application Express installed, you'll want to download and install the entire APEX 3.1.2 release.
Application Express 3.1.2 is inclusive of the modifications made for Application Express 3.1.1 as well as some new bug fixes. It also includes corrections for a couple of regressions (unfortunately) introduced in the APEX 3.1.1 patch set as well as the issues introduced in APEX 3.1.1 with the labels and 2D Flash charts. Lastly, we took Billy V's comments to heart and revised the patch set installation instructions (although I'm sure we'll get further opinions).

The Application Express 3.1.2 patch set was applied to http://apex.oracle.com on Wednesday, 27-AUG-2008.

Friday, August 08, 2008

Oracle Application Express and Oracle MetaLink

When customers have questions about the scalability of Oracle Application Express or Oracle’s commitment to Application Express, the use of Application Express in Oracle MetaLink is often cited by other customers.

Recently, an e-mail from the Oracle MetaLink team went out to MetaLink users, inviting them to try out the new Oracle MetaLink and get their feedback. The new MetaLink is not written with Oracle Application Express, prompting some customers to write an e-mail to me and ask me what’s going on. There was also a recent discussion on one of the ODTUG mailing lists about this very topic. Here are some statements which will undoubtedly be inferred from this change:

  1. Oracle is no longer committed to Oracle Application Express
  2. Oracle Application Express couldn’t handled the scalability needs of Oracle MetaLink

Let me say that both of these statements are false.

Oracle acquired many companies and products over the past few years. Included in these acquisitions was software to help manage the customer relationship. This really became a business decision of either continuing to maintain and extend custom-written software in Oracle Application Express and PL/SQL, or use the off-the-shelf software that Oracle sells. As Tom Kyte often references the “Buy versus Build” decision, this one was even simpler – “Buy versus Own”.

That’s the decision in a nutshell. Anything else inferred from this change would be factually incorrect.

Tuesday, July 29, 2008

Using Oracle Application Express and the Oracle eBusiness Suite?

Are you using Oracle Application Express in conjunction with the Oracle eBusiness Suite? If so, then we'd like to hear from you!

David Peake recently blogged about this, and is collecting information from the Oracle Application Express community. The purpose of this is to gather evidence with the eventual goal of formally legitimizing the use of Oracle Application Express with the Oracle eBusiness Suite.

If you are currently using Oracle Application Express with the Oracle eBusiness Suite (or other Oracle Applications, for that matter), I encourage you to read his blog and take his one page survey. You can provide as much or as little information as you wish, and you have my personal assurances - no sales or marketing representative will call.

Thursday, July 17, 2008

Export data from Oracle Application Express and import via Oracle SQL*Loader

The other day, Josie from Oracle asked me:

"When I export the data, both as csv and xml the date is exported like this: 2005-08-29T00:00:00. sqlldr has a fit about that!"

What she was saying, in rather abbreviated form, was that she was having difficulty using the Oracle utility SQL*Loader to import a data file which was exported from Application Express -> Utilities -> Data Load/Unload. In particular, Josie was having difficulty loading the data of datatype DATE.

If you Unload to Text the EMP table, you'll get something that looks like:

"7839","KING","PRESIDENT","","1981-11-17T00:00:00","5000","","10"
"7698","BLAKE","MANAGER","7839","1981-05-01T00:00:00","2850","","30"
"7782","CLARK","MANAGER","7839","1981-06-09T00:00:00","2450","","10"
"7566","JONES","MANAGER","7839","1981-04-02T00:00:00","2975","","20"
"7788","SCOTT","ANALYST","7566","1982-12-09T00:00:00","3000","","20"
"7902","FORD","ANALYST","7566","1981-12-03T00:00:00","3000","","20"
"7369","SMITH","CLERK","7902","1980-12-17T00:00:00","800","","20"
"7499","ALLEN","SALESMAN","7698","1981-02-20T00:00:00","1600","300","30"
"7521","WARD","SALESMAN","7698","1981-02-22T00:00:00","1250","500","30"
"7654","MARTIN","SALESMAN","7698","1981-09-28T00:00:00","1250","1400","30"
"7844","TURNER","SALESMAN","7698","1981-09-08T00:00:00","1500","0","30"
"7876","ADAMS","CLERK","7788","1983-01-12T00:00:00","1100","","20"
"7900","JAMES","CLERK","7698","1981-12-03T00:00:00","950","","30"
"7934","MILLER","CLERK","7782","1982-01-23T00:00:00","1300","","10"



What should stand out to you is the value for the EMP.HIREDATE column. Why is it formatted this way?

To explain it simply, users of Application Express span all possible countries, territories and languages. A date format that works in one language may not work in another. A good example is a date value that contains an actual month name or an abbreviation of a month name. Today's date in English in Oracle date format DD-FMMonth-RRRR would be 17-July-2008. But change your language to German and you'll get 17-Juli-2008. If your data contains '17-July-2008' and you try to import it into a system with German language settings, it will fail - 'July' is not a valid month name in German.

For the export of DATE type data from Application Express, we needed to use something that works across all languages. We could have devised our own canonical date format. But instead, we decided to employ the international representation of date and time, namely, ISO 8601. So for those who scratch their head and wonder where that odd "T" comes from in the date value, here is your answer.

With this understanding in place of why this value is in this odd-looking format, let's get back to Josie's original question - how do I import this using SQL*Loader? Using a SQL *Loader SQL Operators and escape characters, it's quite easy. Here is a SQL*Loader control file which can be used to load the EMP data from above:

load data
infile "/tmp/emp.txt"
append into table emp
fields terminated by ','
optionally enclosed by '"'
trailing nullcols
(EMPNO, ENAME, JOB, MGR, HIREDATE "to_date(:HIREDATE,'rrrr-MM-dd\"T\"HH24:mi:ss')", SAL, COMM, DEPTNO)



The critical element in the field list, of course, is:

HIREDATE "to_date(:HIREDATE,'rrrr-MM-dd\"T\"HH24:mi:ss')"

which is simply applying a TO_DATE SQL operator to the HIREDATE field of the data file. Additionally, the data value will be represented as a string in a specific format. The double-quotes before and after the 'T' must be escaped, so SQL*Loader doesn't try to interpret that as the end of the expression.


Happy loading.

Monday, July 14, 2008

Oracle eBusiness Suite and mod_plsql

There have been a fair number of questions and concerns about the use of mod_plsql and the Oracle eBusiness Suite. And unfortunately, this has created some confusion about what is and is not supported by Oracle. I know a fair number of customers, both large and small, who are successfully using Oracle Application Express and the Oracle eBusiness Suite just fine.

Steven Chan, who is a Senior Director in the Oracle Applications group, has recently blogged about the availability of a new whitepaper on MetaLink. The whitepaper entitled mod_plsql and Oracle E-Business Suite Release 12 (MetaLink Note 726711.1) is intended to discuss many of the issues around mod_plsql and the Oracle eBusiness Suite.