Wednesday, August 17, 2011
Sunday, February 20, 2011
Oracle Apex book review
Have been asked by Packt to review their new Oracle Apex book so will be doing that soon. Here's a direct link to the book and the sample chapter.
Saturday, April 4, 2009
iPhone Application with Oracle Apex and iWebKit

Created the mobile version of Philadelphia Cricket League website for iPhone using Oracle Apex, JQuery and iWebKit. It's came out pretty neat, it's a work in progress but I had to post this in sheer excitement :). All this without actually using the Apple iPhone SDK.
http://mobile.philadelphiacricketleague.com
Like me if you don't have an iPhone/Touch, you can always view it in http://www.testiphone.com/
Corresponding thread in Oracle Apex Forum:
http://forums.oracle.com/forums/thread.jspa?threadID=880797&tstart=0
Sunday, March 22, 2009
Oracle Apex Showcase Site Updated

Inspired by the SmartGWT Showcase, I updated my Oracle Apex showcase. It has demos for Forms, Lists, Calendars and also a whole bunch of screens related to JQuery integration. It's still a work in progress, but has decent amount of stuff to showcase the power of Oracle Apex and it's possibilities.
Here's a direct link: http://apex.oracle.com/pls/otn/f?p=40346
Monday, March 2, 2009
New Cricket Club Portal with Oracle Apex/JQuery
Check out the new cricket club portal developed with Oracle Apex/JQuery. It has host of features including automatic statistics generation, storefront integration with Google checkout among a few of the features. A club should be able to perform all their tasks, such as posting announcements, headlines, matches, match signups, team selection, online surveys, live chat among other things without any technical knowlege. Check it out, login with the sample user id's provided and let me know if you or someone is in need for a portal for your sports club, it's not just limited to Cricket, it can be expanded for all sports!!! More details at http://www.cricketclubportal.com
Here's the direct link: http://demo.cricketclubportal.com
Tuesday, February 3, 2009
Page Access Protection
I believe since version 3.1, the pages now have Page Access Protection. Use this feature to the fullest to protect the sensitive pages in your application. Without this malicious users can tamper with the URL and do harm. It's available under Page Attributes -> Security -> Page Access Protection. I recommend using "Arguments must have checksum". This will ensure that a checksum is appended to the URL that is specific to only that specific instance of the URL and cannot be manipulated.
In addition, you should also use another mechanism to secure the sensitive buttons, pl/sql processes in the page.
Sunday, February 1, 2009
Accordion using JQuery
Created this demo site where I will be posting new things I try out. It now has a page to show how to get JQuery accordion running within Apex, it's so simple to setup and use. Hope you guys like it. JQuery is so cool, this weekend was dedicated to it. Why didn't I look into it earlier? :)
Updated: 2/2/09: Also added DatePicker (page level and application level)
Updated: 2/2/09: Also added DatePicker (page level and application level)
My first screencast about the Cricket Club Portal
Check this screencast of the upcoming Cricket Club Portal that's under development. Wanted to create a sneak peak to garner the interest. It's developed using Oracle Apex. :)
Cricket Club Portal screencast
www.cricketclubportal.com
Cricket Club Portal screencast
www.cricketclubportal.com
Thursday, January 29, 2009
Oracle Apex AJAX Resources
Wednesday, January 28, 2009
Pipelined function
Great articles on usage of Pipelined functions to deal with delimited string as a table of rows:
http://christopherbeck.wordpress.com/2008/12/05/pipelined-functions/#comment-67
http://articles.techrepublic.com.com/5100-10878_11-5259821.html
http://christopherbeck.wordpress.com/2008/12/05/pipelined-functions/#comment-67
http://articles.techrepublic.com.com/5100-10878_11-5259821.html
Sunday, January 18, 2009
Incorporating Captcha on Oracle Apex site
Check out this fantastic article by Patric on integrating Captcha on Oracle Apex. It works beautifully.
http://www.inside-oracle-apex.com/2007/09/adding-captcha-to-your-oracle-apex.html
http://www.inside-oracle-apex.com/2007/09/adding-captcha-to-your-oracle-apex.html
Friday, January 9, 2009
OpenId
Check out this handy reference to enable openId on your website. OpenId enables your clients to login to your website using one single userid/password, taking the hassle out of remembering multiple userids/passwords for each site. If you are using yahoo, gmail, blogger, wordpress etc. you already have openid, you just need to enable them and use it.
Check this handy reference:
http://www.plaxo.com/api/openid_recipe
To learn more about openId, check out the official website at:
http://www.openid.net
Check this handy reference:
http://www.plaxo.com/api/openid_recipe
To learn more about openId, check out the official website at:
http://www.openid.net
Yahoo Maps API
You can use Yahoo Maps API to integrate Yahoo maps within your application, it's pretty simple and neat. You can even display traffic information. Check out:
https://developer.yahoo.com/maps/
https://developer.yahoo.com/maps/
Google Chart API
Google Chart API allows you to dynamically create charts by just passing parameters to an URL, it's pretty amazing. You can generate all kinds of charts, check it out...
http://code.google.com/apis/chart/types.html
Check this simple example:
http://code.google.com/apis/chart/types.html
Check this simple example:
http://chart.apis.google.com/chart?cht=p3&chd=t:60,40&chs=250x100&chl=Hello|World
Monday, August 25, 2008
Oracle Analytic functions
Here's an excellent article that I always refer to when I am in doubt on using Oracle analytic functions...
http://www.orafaq.com/node/55
http://www.orafaq.com/node/55
Monday, June 30, 2008
Merge statement
Merge statement is available in Oracle since version 9i. You can use this to perform INSERT and UPDATE all in one statement.
However note that running MERGE statement in parallel can cause error situations, this happens mostly due to the fact that each parallel process tries to insert a row that doesn't exist causing primary key violations.
Here's a simple example:
Merge into d
Using (select col1, col2, col3 from src_table) s
On (d.col1 = s.col1)
When matched then
Update set d.col2 = s.col2,
d.col3 = s.col3
When not matched then
Insert (d.col2, d.col3) values (s.col2, s.col3);
However note that running MERGE statement in parallel can cause error situations, this happens mostly due to the fact that each parallel process tries to insert a row that doesn't exist causing primary key violations.
Here's a simple example:
Merge into
Using (select col1, col2, col3 from src_table) s
On (d.col1 = s.col1)
When matched then
Update set d.col2 = s.col2,
d.col3 = s.col3
When not matched then
Insert (d.col2, d.col3) values (s.col2, s.col3);
Finding duplicate rows in Oracle
Adding these to my utility sqls.
SELECT col1, col2, COUNT(*)
FROM table1
GROUP BY col1, col2
HAVING COUNT(*) > 1
SELECT *
FROM table1 a
WHERE ROWID !=
(SELECT MAX(ROWID) FROM table1 b
WHERE a.col1 = b.col1
AND a.col2 = b.col2)
Note: col1 and col2 are assumed to be the unique columns that identify a row.
SELECT col1, col2, COUNT(*)
FROM table1
GROUP BY col1, col2
HAVING COUNT(*) > 1
SELECT *
FROM table1 a
WHERE ROWID !=
(SELECT MAX(ROWID) FROM table1 b
WHERE a.col1 = b.col1
AND a.col2 = b.col2)
Note: col1 and col2 are assumed to be the unique columns that identify a row.
Thursday, June 26, 2008
Apex with AJAX - Display Thumbnail on MouseOver
This is my first major technical blog, so I am pretty excited about it. :)
I had to display a thumbnail when I click on a row, on further search, came across the following website that lists a lot of APEX/AJAX related things, so I decided to give that a try. There's a page where AJAX is used to display Item Help when the user does a mouse over a particular Item. I got a brainwave, hmmm how about I use that to display a picture instead? So here I was, breaking my head over it and was finally able to figure it all out after a couple of hours of hard work, without actually adding any application level items or processes, it's pretty neat. Check out the Statistics page in http://www.philadelphiacricketleague.com for a demo, mouse over the name of a player.
Here's what I did:
(Step 1): I had a report that displays a list of players. On this page, I added the following Javascript in the HTML HEADER section:
<script type="text/javascript">
function AJAX_PIC(pThis,pId){
this.dTimeout;
clearTimeout(this.dTimeout);
this.dGet = dGet;
this.dShow = dShow;
this.dCancel = dCancel;
/* var get = new htmldb_Get(null,$x('pFlowId').value,'APPLICATION_PROCESS=AJAX_ITEM_HELP',0);
*/
var get = new htmldb_Get(null,$x('pFlowId').value,'APPLICATION_PROCESS=',0);
this.dGet();
return;
function dGet(){
this.dTimeout = setTimeout("this.dCancel()",5000);
//get.add('TEMPORARY_ITEM',pId);
get.GetAsync(dShow);
}
function dShow(){
$x_Hide('rollover');
if(p.readyState == 1){
}else if(p.readyState == 2){
}else if(p.readyState == 3){
}else if(p.readyState == 4){
$x('rollover_content').innerHTML =
'<img src="p?n=' + pId + '" />';
$x_Show('rollover');
htmldb_IE_Select_Item_Fix($x('rollover'));
$x_Style('rollover','left',findPosX(pThis)+pThis.offsetWidth+5);
$x_Style('rollover','top',findPosY(pThis)-($x('rollover').offsetHeight/2)+($x(pThis).offsetHeight/2));
document.onclick = function(e){
dCheckClick(e);
}
}else{return false;}
}
function dCheckClick(e){
var elem = html_GetTarget(e);
try{
var lTable = $x_UpTill(elem,"DIV");
if(lTable.id!='rollover_content'){dCancel();}
else{}
}catch(err){dCancel();}
}
function dCancel(){
$x_Hide('rollover');
document.onclick = null;
get = null;
}
}
</script>
The above is a modification of the original JavaScript. Note, I commented out the application process, and also the related parameter. So basically there's no application item or process. Then I updated the code where the innerHTML is set, and changed it to a image tag. The pID value is basically the ID related to the image that's stored in the HTMLDB_APPLICATION_FILES table.
(Step 2): Then for the Report, added the following to the REGION FOOTER:
<div id="rollover" style="display:none;background:#FFF;width:150px;position:absolute;z-index:9999"> <div id="rollover_content" style="padding:4px;border:2px "> </div>
(Step 3): Then in the Report attributes, open up the column for which the thumbnail needs to be displayed, and added the following code in the HTML EXPRESSION for the Column Attributes:
<a href="" onmouseover="AJAX_PIC(this,'#ID#')">#NAME#</a>
Where ID is the value from HTMLDB_APPLICATION_FILES tables corresponding to the picture. Basically Oracle Apex displays any picture from the HTMLDB_APPLICATION_FILES table if you use the following syntax:
<img src="p?n=15900401113612336" />
The number above is the ID for the image.
I also came across another neat way to do this, but it needs you to upload a JavaScript file. The details are in Dimitri's blog, here's the URL.
That's about it! Please leave any feedback if you find this useful or streamline it further.
I had to display a thumbnail when I click on a row, on further search, came across the following website that lists a lot of APEX/AJAX related things, so I decided to give that a try. There's a page where AJAX is used to display Item Help when the user does a mouse over a particular Item. I got a brainwave, hmmm how about I use that to display a picture instead? So here I was, breaking my head over it and was finally able to figure it all out after a couple of hours of hard work, without actually adding any application level items or processes, it's pretty neat. Check out the Statistics page in http://www.philadelphiacricketleague.com for a demo, mouse over the name of a player.
Here's what I did:
(Step 1): I had a report that displays a list of players. On this page, I added the following Javascript in the HTML HEADER section:
<script type="text/javascript">
function AJAX_PIC(pThis,pId){
this.dTimeout;
clearTimeout(this.dTimeout);
this.dGet = dGet;
this.dShow = dShow;
this.dCancel = dCancel;
/* var get = new htmldb_Get(null,$x('pFlowId').value,'APPLICATION_PROCESS=AJAX_ITEM_HELP',0);
*/
var get = new htmldb_Get(null,$x('pFlowId').value,'APPLICATION_PROCESS=',0);
this.dGet();
return;
function dGet(){
this.dTimeout = setTimeout("this.dCancel()",5000);
//get.add('TEMPORARY_ITEM',pId);
get.GetAsync(dShow);
}
function dShow(){
$x_Hide('rollover');
if(p.readyState == 1){
}else if(p.readyState == 2){
}else if(p.readyState == 3){
}else if(p.readyState == 4){
$x('rollover_content').innerHTML =
'<img src="p?n=' + pId + '" />';
$x_Show('rollover');
htmldb_IE_Select_Item_Fix($x('rollover'));
$x_Style('rollover','left',findPosX(pThis)+pThis.offsetWidth+5);
$x_Style('rollover','top',findPosY(pThis)-($x('rollover').offsetHeight/2)+($x(pThis).offsetHeight/2));
document.onclick = function(e){
dCheckClick(e);
}
}else{return false;}
}
function dCheckClick(e){
var elem = html_GetTarget(e);
try{
var lTable = $x_UpTill(elem,"DIV");
if(lTable.id!='rollover_content'){dCancel();}
else{}
}catch(err){dCancel();}
}
function dCancel(){
$x_Hide('rollover');
document.onclick = null;
get = null;
}
}
</script>
The above is a modification of the original JavaScript. Note, I commented out the application process, and also the related parameter. So basically there's no application item or process. Then I updated the code where the innerHTML is set, and changed it to a image tag. The pID value is basically the ID related to the image that's stored in the HTMLDB_APPLICATION_FILES table.
(Step 2): Then for the Report, added the following to the REGION FOOTER:
<div id="rollover" style="display:none;background:#FFF;width:150px;position:absolute;z-index:9999"> <div id="rollover_content" style="padding:4px;border:2px "> </div>
(Step 3): Then in the Report attributes, open up the column for which the thumbnail needs to be displayed, and added the following code in the HTML EXPRESSION for the Column Attributes:
<a href="" onmouseover="AJAX_PIC(this,'#ID#')">#NAME#</a>
Where ID is the value from HTMLDB_APPLICATION_FILES tables corresponding to the picture. Basically Oracle Apex displays any picture from the HTMLDB_APPLICATION_FILES table if you use the following syntax:
<img src="p?n=15900401113612336" />
The number above is the ID for the image.
I also came across another neat way to do this, but it needs you to upload a JavaScript file. The details are in Dimitri's blog, here's the URL.
That's about it! Please leave any feedback if you find this useful or streamline it further.
Subscribe to:
Posts (Atom)