Showing posts with label Oracle Apex. Show all posts
Showing posts with label Oracle Apex. Show all posts

Wednesday, May 22, 2013

How to locate all interactive reports in my application?

Today my client decided to remove the email functionality from all interactive reports in their APEX application.

I could step through all the pages of my application and check whether there are any interactive reports used. This very manual approach can take some time and I can make mistakes by overlooking some of the interactive reports to modify.

A different approach would be to use the (officially supported) data dictionary views in APEX. Using this simple sql query I can find all interactive reports in all pages of my application (having the id 20120618):
select   workspace
       , application_id
       , application_name
       , page_id
       , region_name
       , download_formats
  from apex_application_page_ir
 where application_id=20120618
 order by page_id;
This will show all interactive reports which are used in my application:


We can even look for all interactive reports that need to be fixed by specifically looking for all reports where the download format email is enabled:
select   workspace
       , application_id
       , application_name
       , page_id
       , region_name
       , download_formats
  from apex_application_page_ir
 where application_id=20120618
   and instr(download_formats, 'EMAIL') > 0
 order by page_id;
These data dictionary views contain a wealth of information about your application. This is a real strength of Oracle Application Express, due to its nature being driven by a metadata repository.

Thus from a quality management perspective you could use the following query to make sure, all interactive reports are configured the same way, i.e. having flashback disabled, using the same display position for pagination (Top and Bottom-Left) and showing the dropdown list for selecting the rows per page:
select   workspace
       , application_id
       , application_name
       , page_id
       , region_name
       , pagination_display_position
       , show_rows_per_page
       , show_flashback
  from apex_application_page_ir
 where application_id=20120618
   and (   pagination_display_position <> 'Top and Bottom - Left'
        or show_rows_per_page = 'No'
        or show_flashback = 'Yes' )
 order by page_id;
Here is the result:


But how do we find the appropriate views? The APEX data dictionary contains information about all available data dictionary views and all of their columns.

Typicall I use the following query to find all information about interactive reports, all related views contain _IR_ in the view name:
select *
  from apex_dictionary
 where apex_view_name like '%IR%'
This will show us all view including their respective columns:


If we want to display the view only without their columns we can add the filter for the column_id 0, in there the APEX team added the overall description of the view itself:
select *
  from apex_dictionary
 where apex_view_name like '%IR%'
   and column_id=0; 
Now, we get only the view names including their description:


Regards,
~Dietmar.

Thursday, January 28, 2010

APEX Stammtisch am 22.02.2009 in Siegburg

The following post is targeted towards a German audience, thus it is in German:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Wir (Denes Kubicek und Dietmar Aust) werden am 22 Februar 2010 um 19:00 noch einmal den APEX Stammtisch in einer lockeren Variante durchführen, einfach nur ein leckeres Bier, gutes Essen, interessante Gespräche rund um APEX und interessante Leute.
Weitere Details und die kostenlose Anmeldung findet Ihr hier ...

Wir freuen uns auf ein lockeres Kennenlernen bei einem Bier und evtl. leckerem Flammkuchen.

Viele Grüße und bis zum Stammtisch,
~Dietmar.

Thursday, January 14, 2010

Jasper Reports Integration - beta release v0.8.0.0

First the good news: I have finally wrapped up the Jasper Reports Integration package and made it available for download.

It is in beta quality and needs some more testing (of the code and documentation) before it should be used in production. Once it hits the first production release, the interface packages should remain stable. Until then they might change with the later beta releases.

Everybody who wants to join the beta program is more than welcome! Any feedback is welcome.

You can get all the files, infos about the architecture and the installation guides here.

Then, I really have to apologize for taking so long (I had promised to release it much earlier) and not responding to many of the emails I have received. I am really sorry for that but my life has gone haywire in the last year - and I am still recovering from that. 

Update on 04.09.2010: Version 1.1.0.0 is now available: http://daust.blogspot.com/2010/09/jasper-reports-integration-v1100.html

Regards,
~Dietmar.

Tuesday, December 22, 2009

Book on APEX and XE published

Finally! My first book on Oracle APEX has just been published and is available for sale now! Would make for a great Christmas present :)

I have teamed up with Jens-Christian Pokolm (a long time DBA from Postbank Systems, regular presenter at various Oracle conferences) and Denes Kubicek (Oracle ACE and APEX developer of the year, you know him ;).

Jens-Christian covered the Oracle XE part and Denes and me both worked on the APEX parts.

We took a very practical approach writing about the best practices we have developed through the years and many successful projects.

The book is available only in German, sorry ;).

We also provide a website for the book (http://www.apex-xe-praxis.de). How was it built? Certainly we have used Oracle APEX and XE, what else? Proof of concept ;).

Cheers and have a great Christmas,
~Dietmar.

Wednesday, January 28, 2009

APEX Stammtisch am 10.2.2009 in Siegburg

The following post is targeted towards a German audience, thus it is in German:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Wir (Denes Kubicek und Dietmar Aust) werden am 10 Februar 2009 um 19:00 noch einmal den APEX Stammtisch in einer lockeren Variante durchführen, einfach nur ein leckeres Bier, gutes Essen, interessante Gespräche rund um APEX und interessante Leute.
Weitere Details und die kostenlose Anmeldung findet Ihr hier ...

Danach werden wir dem Stammtisch ein wenig mehr Struktur geben. Bei den Treffen werden wir uns dann auf einige wenige Themen konzentrieren, die im Vorfeld bekannt gegeben werden. Die Teilnehmer können auch gerne ihre eigenen APEX Applikationen vorstellen, ein Beamer wird vorhanden sein.

Wir freuen uns auf ein lockeres Kennenlernen bei einem Bier und evtl. leckerem Flammkuchen.

Leider ist seit dem letzten Stammtisch viel zu viel Zeit vergangen. Dennoch wollen wir es noch einmal versuchen, die Veranstaltung in regelmäßigen Abständen durchzuführen.

Viele Grüße und bis zum Stammtisch,
~Dietmar.

Sunday, November 09, 2008

APEX Training in Bensheim (23.03 - 25.03.2009)

We (Denes Kubicek, Patrick Wolf and Dietmar Aust) are happy to announce the next APEX Training in Bensheim/Germany. Thus the rest of the post is in German.

Das nächste APEX Training findet am 23.03.2009 bis zum 25.03.2009 erneut in Bensheim bei Frankfurt statt, im dortigen Aleehotel.

Oracle APEX: Knowhow aus der Praxis

Nutzen Sie das Wissen und die Erfahrung von
  • Patrick Wolf, langjähriger Oracle Veteran und Senior Solution Architect bei einer Wiener IT Firma, wurde erst kürzlich vom Oracle Magazin zum „Oracle APEX Developer of the year 2007“ ausgezeichnet. Er ist weiterhin ein Oracle ACE und Betreiber des bekannten Blogs Inside Oracle APEX,

  • Denes Kubicek, langjährige Projekterfahrung in den Bereichen Oracle und APEX mit multisite Applikationen, diesjähriger Preisträger des "Oracle APEX Developer of the Year 2008" Awards des Oracle Magazines und sehr bekannt im Oracle APEX OTN Forum für seine Beispielapplikation und

  • Dietmar Aust, erfahrener Oracle Consultant mit Spezialisierung auf Oracle Apex, aktiv in den OTN Foren zu Apex und Oracle XE, mit Präsentationen auf den letzten DOAG Veranstaltungen

, um Best Practice Vorgehensweisen aus vielen erfolgreichen APEX Projekten zu lernen.

Neben einer Fülle an Informationen, die wir in vielen erfolgreichen APEX Projekten erarbeitet haben, sind insbesondere die abendlichen Sessions (von 19:00-21:00) als Highlight zu nennen.

Dort stehen wir Ihnen für zusätzliche Hands-On Sessions zur Verfügung, um die Beispiele des Tages durchzuarbeiten oder auch, um konkrete Fragestellungen in Ihren aktuellen Projekten zu diskutieren.

Insgesamt haben wir das Kursprogramm noch etwas aufgeräumt und einige Hands-on Übungen integriert.

Weitere Details zum Kurs sowie die Anmeldung finden Sie hier.

~Dietmar Aust.

Thursday, January 31, 2008

Customer success story at ODTUG Kaleidoscope 2008


I will be presenting two customer success stories at the ODTUG Kaleidoscope 2008 in New Orleans this year. This is about the work I have done for the German Telecom Shops (T-Punkt Vertriebsgesellschaft mbH). This presentation is not so much about the technical details but more about the business related stuff.

Why ist this application important for the customer? What were the greatest benefits? Why was APEX chosen as a technology. How did this technology perform compared to the usual suspects ;) ?

Thanks to Scott Spendolini, he invited me to give this presentation. Hope to finally meet him there.

And I do look forward to meet up again with all the APEX developers and enthusiasts around the world, like Joel Kallman, Patrick Wolf, Carl Backstrom, Dimitri Gielis, John Scott (this time spelled correctly ;), David Peake, ... and meet some new ones, too.

It will be real fun to come back to New Orleans. I have been there in 1996 for mardi gras, it was a pure blast !!! I wonder how things have changed since Katrina.

Hope to see you there,
~Dietmar.

Wednesday, December 26, 2007

New website released based on Apex and XE

A few days ago, I have relaunched my company website at www.opal-consulting.de . This is a major redesign regarding the layout and the underlying technology.

How else could I possibly build my own website if not using Oracle Application Express and Oracle XE? I guess it has come out pretty well and it looks nice.

For now it is only in German, some English pages might follow in the future.
Here are some screenshots of my site:





I think it is sometimes necessary to showcase some really nice looking app in order to get a customer to "buy into" the underlying technology. In the end, this is all what the end-user "sees".

We (as developers) all know that Apex is "just" another framework with a rendering engine like so many others written in Java, C##, Perl, PHP, ... , you name it.

You can easily change the complete layout and/or integrate any 3rd party javascript library or other extension like all the other web frameworks out there. It is really versatile and extensible.
It is just that so many people *only* think of the standard sample application and the little tiny apps they do in the workshops. They think you are completely tied to this look and feel. But you aren't!

Hopefully, the look and feel of my site will make some people think differently about Apex!!!


I hope you like it :), comments are welcome!

Regards,
~Dietmar.

Thursday, September 20, 2007

Apex Roundtable Talk with Mike Hichwa

Last Tuesday I have met Michael Hichwa at the Apex Roundtable Talk in Stuttgart. He is a great guy who truly loves this product. I am really happy to have chosen Application Express as my primary focus.

Denes Kubicek, Patrick Wolf und Carsten Czarski joined in on the discussion, amongst other Oracle customers that use Application Express a lot.

Mike gave an interesting presentation on the upcoming features. You can see the presentation here. He was also very interested in the projects we did and the enhancements we would like to see.

Lots of interesting stuff will be coming, it is really exciting. The 3.1 release is expected in November, the 4.0 release some time in the first quarter of 2008.

What I am really looking forward is the gradual publishing of an official API for Apex. Then we will be able to programmatically create applications, pages, regions, basically everything. This is a major step forward. It does already work now but is not supported.

Also the Apex team will make the Application Builder more extensible. They will start with custom item types in 4.0. Learning from this they will add more possibilities to add custom region types and wizards in subsequent releases.

He was also demonstrating some of the new features of 4.0, especially the new query report region, which uses AJAX a lot. There is a video done by Carl Backstrom available which shows some of this functionality.

So, lots of great stuff is coming ahead.

Regards,
~Dietmar.

Saturday, March 10, 2007

Apex Community Page updated

Last Wednesday, the community page on Application Express was updated.

You can find there links to

* APEX Community
* Special Interest Groups
* Consulting Companies
* Hosting Companies
* BLOGs
* Commmunity How-Tos and Articles

Regards,
~Dietmar.

Denes Kubicek - ApEx Demo

Many of us are already familiar with the excellent work of Denes Kubicek in the Apex forum. Especially his API to the cool xml charts ( XML/SWF Charts).

You can find his demo applications here.
The xml charts API can be found here.

Enjoy,
~Dietmar.

Friday, September 15, 2006

Apex: Database authentication - an alternative solution

Using native Oracle accounts for an Apex application has been a long requested feature.

Up until version 2.0 of Oracle Application Express (aka HTML DB) your choice of using authentication schemes (out of the box) were:

- Show Built-In Login Page and Use Open Door Credentials
- Show Login Page and Use HTML DB Account Credentials
- Show Login Page and Use LDAP Directory Credentials
- No Authentication (using DAD)
- Oracle Application Server Single Sign-On (HTML DB Engine as Partner App)
- Oracle Application Server Single Sign-On (My Application as Partner App)

With the release of Oracle Express Edition you could also use existing database accounts for authentication purposes out of the box, but this would only work with Oracle Express Edition.


In this release the developers of the database implemented an internal password validation check which is used to provide the functionality. The code for Oracle XE is based on the code release of Oracle 10gR2 (10.2.0.1).

Unfortunately this functionality was not available for Apex applications running version 2.0.

With the release of Apex 2.2 you can now also use the database authentication scheme out of the box. Unfortunately this has some limitations / drawbacks:

If you install Apex 2.2 into an Oracle version 10.2.0.3 and above, it will use the native password validation function and everything will be fine.

If you install Apex 2.2 instead into an Oracle version below 10.2.0.3, it will provide the same functionality but use a different approach. They store the current password, change the password on the fly, compare the password and reset the password afterwards if they were not equal (alter user identified by values [old_password_hash]): http://forums.oracle.com/forums/message.jspa?messageID=869036#869036

This can cause problems (i.e. ORA-28007: the password cannot be reused) in the case you use password policies in your Oracle database (http://forums.oracle.com/forums/thread.jspa?forumID=137&threadID=422914)

In a recent project we have come up with a different solution to this problem. Many thanks to Ulrich Kämmerer (http://www.creon-it.de/) for figuring this out with me.

We used a jdbc thin connection to validate the password from whithin the database using java stored procedures.

Here is the solution (you can download all the required files at the end of this post):

We assume the following values for this sample, please change accordingly to match your system:
- Apex application schema: APEX_TEST
- Password for this schema: apex_test
- Listener port for this Oracle instance: 1521
- Tnsnames entry for the instance: o920
- Oracle SID for the instance: o920

1) Create the java class PasswordValidator:

import java.sql.*;
import oracle.jdbc.*;

public class PasswordValidator
{
public PasswordValidator()
{
}

public static int isValidPassword(String pServerName, String pListenerPort, String pSID, String pUserName, String pPassword) throws SQLException
{
boolean bIsValid = false;

try{
DriverManager.registerDriver(new OracleDriver());
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@" + pServerName + ":" + pListenerPort + ":" + pSID, pUserName, pPassword);
bIsValid = true;

} catch (SQLException e)
{
//e.printStackTrace();
//System.out.println("ErrorCode=" + e.getErrorCode());

if (e.getErrorCode() == 1017)
{
// ORA-01017: invalid username/password
bIsValid = false;
} else {
//result = e.getMessage();
// re-raise exception
throw(e);
}
}

return bIsValid == true ? 1 : 0;
}
}

2) Compile the java class

3) Load the java class into the database:

loadjava -user APEX_TEST/apex_test@o920 PasswordValidator.class

4) Grant the proper rights using the SYS account:

begin
dbms_java.grant_permission('APEX_TEST','SYS:java.net.SocketPermission', 'localhost:1521', 'connect,resolve' );
end;
/

5) Modify the package variables to match your settings:

c_server_name CONSTANT VARCHAR2 (50) := 'localhost';
c_listener_port CONSTANT VARCHAR2 (50) := '1521';
c_sid CONSTANT VARCHAR2 (50) := 'o920';

6) Install the package in your Apex schema (e.g. APEX_TEST):

CREATE OR REPLACE PACKAGE apex_sec_pck IS
/******************************************************************************
NAME: APEX_SEC_PCK
PURPOSE: Security Package for database authentication
(using jdbc thin connections)


REVISIONS:
Ver Date Author Description
--------- ---------- --------------- -----------------------------------
1.0 14.06.2006 D. Aust Initiale Erstellung

******************************************************************************/

/**************************************************************************
Constants and Types
**************************************************************************/

/*======================================================
FUNCTION is_valid_password_fc

Tests, wether this username/password is a valid combination
for this instance.

Parameter : p_username
Parameter : p_password
Return : boolean
Exception :
=======================================================*/
FUNCTION is_valid_password_fc (p_username IN VARCHAR2, p_password IN VARCHAR2)
RETURN boolean;


END;
/

CREATE OR REPLACE PACKAGE BODY apex_sec_pck IS
c_server_name CONSTANT VARCHAR2 (50) := 'localhost';
c_listener_port CONSTANT VARCHAR2 (50) := '1521';
c_sid CONSTANT VARCHAR2 (50) := 'o920';


FUNCTION is_valid_password_java_wrp_fc (p_server_name IN VARCHAR2, p_listener_port IN VARCHAR2, p_sid IN VARCHAR2, p_username IN VARCHAR2, p_password IN VARCHAR2)
RETURN NUMBER AS
LANGUAGE JAVA
NAME 'PasswordValidator.isValidPassword(java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String) return int';

-----------------------------------------------------------------------------
--
--
--
FUNCTION is_valid_password_fc (p_username IN VARCHAR2, p_password IN VARCHAR2)
RETURN BOOLEAN IS
l_user VARCHAR2 (30);
l_retval NUMBER;
BEGIN
l_retval := is_valid_password_java_wrp_fc (p_server_name => c_server_name, p_listener_port => c_listener_port, p_sid => c_sid, p_username => p_username, p_password => p_password);

IF l_retval = 1 THEN
RETURN TRUE;
ELSE
RETURN FALSE;
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.put_line (SQLERRM);
RETURN FALSE;
END;

END;
/

7) Now test your password validation function in sql/plus:

SET serveroutput on

BEGIN
DBMS_OUTPUT.put ('Password test 1 (correct password): ');

IF apex_sec_pck.is_valid_password_fc ('apex_test', 'apex_test')
THEN
DBMS_OUTPUT.put_line ('password is valid');
ELSE
DBMS_OUTPUT.put_line ('password is *not* valid');
END IF;

DBMS_OUTPUT.put ('Password test 2 (incorrect password): ');

IF apex_sec_pck.is_valid_password_fc ('apex_test', 'incorrect_pwd')
THEN
DBMS_OUTPUT.put_line ('password is valid');
ELSE
DBMS_OUTPUT.put_line ('password is *not* valid');
END IF;
END;
/

8) Create a new authentication scheme in Apex:

The only three relevant entries are (leave everything else empty / use defaults):

a) Invalid session target : Page in this application => 101

b) Credentials Verification Method: Use my custom function to authenticate
=> return apex_sec_pck.is_valid_password_fc

c) Logout url: wwv_flow_custom_auth_std.logout?p_this_flow=&APP_ID.&p_next_flow_page_sess=&APP_ID.:1

You can download all source files, the compiled java class and a sample application (f118.sql) using this authentication scheme here: http://www.opal-consulting.de/downloads/db_authentication_jdbc.zip

Regards,
~Dietmar.

Tuesday, April 11, 2006

Apex: New Frappr Group for Apex Services

Most people in the Forum love Oracle Application Express, but we feel it needs some more visibility.

I have created a new group on Frappr for Oracle Application Express Services :
http://www.frappr.com/oracleapplicationexpressservices


There you can find services related to Oracle Application Express: consultants, developers, hosting services and products based on Apex.

Please add yourself to the map if you provide any services related to Oracle Application Express.
There is also another listing of services on the Wiki page for Application Express.

We also feel that we might need some more prebuilt applications like in the Apex Studio on OTN.

I don't know yet what we (the community) will come up with, but it will be interesting. So stay tuned ...

~Dietmar.

Wednesday, March 29, 2006

Apex: Workaround for SVG chart hyperlink bug with Firefox 1.5

I have come across a nasty problem using SVG charts in Apex.

In order to create drill-down charts with Oracle Application Express you provide a SQL statement that will return the data to display a SVG chart's series. This SQL statement must be provided using this syntax:
SELECT link, label, value FROM...
For example:
select
'f?p=141:6:'||:app_session||'::::F141_P6_EMPNO:'||empno link,
ename,
sal
from emp
A simple chart might look like this:


When clicking on the link you would want to see a detail page in
the same browser window
:

While this works well in Internet Explorer 6, Firefox 1.0.7 and Mozilla, what you see in Firefox 1.5 is:


This is due to a bug in Firefox 1.5 ( https://bugzilla.mozilla.org/show_bug.cgi?id=300868 )
. Unfortunately does Firefox ignore the target="_top" attribute for the xlink tag:

<a xlink:href="newdoc.html" target="_top">

The suggested workaround is :
xlink:href="javascript:window.top.location.href='newdoc.html'"

Using this fix to implement a workaround for Apex means changing a query like this:
SELECT *
FROM (SELECT 'f?p=&APP_ID.:14:' || :app_session || '::::P14_EMPNO:' || empno || ':' LINK
, ename label, sal VALUE
FROM HTMLDB_SAMPLES.EMP
WHERE sal IS NOT NULL
ORDER BY ename)

to a query like this:

SELECT *
FROM (SELECT 'javascript:window.top.location.href=''f?p=&APP_ID.:14:' || :app_session
|| '::::P14_EMPNO:' || empno || ':''' LINK
, ename label, sal VALUE
FROM HTMLDB_SAMPLES.EMP
WHERE sal IS NOT NULL
ORDER BY ename)

This works fine for all of the above mentioned browsers.

~Dietmar.

Thursday, March 16, 2006

Where are the /images of Application Express in OracleXE?

In a standalone Apex installation, the required images, css and javascript files are accessible via the virtual path /i.

This virtual path mapping looks something like this in your marvel.conf (or dads.conf) file:
Alias /i/ /opt/oracle/oracle/product/10.2.0/htmldb/images/

But where are the images in OracleXE?

When you look at http://127.0.0.1:8080/i you will see that the images are available, but they cannot be found in the filesystem.


In OracleXE these resources are stored directly in the database, using the Oracle XMLDB feature.
You can access the resources and modify them directly by using the WebDAV feature of the XMLDB.

(1) With Internet Explorer, just go to File > Open > http://127.0.0.1:8080/i (check "open as webfolder"):

(2) You will be prompted for user credentials, enter username and password for the database user SYSTEM:
(3) After that you can access the files via WebDAV directly, using Drag&Drop:


Update (19.03.2006)

If you don't have an Internet Explorer for connecting via WebDAV available, you can also use another WebDAV client like sitecopy or cadaver ( http://www.webdav.org/projects/ ).

Or you can simply use a plain FTP client to modify the files:

(1) Enable FTP access to the database:
www:oraclexe[XE]> sqlplus system@xe
SQL*Plus: Release 10.2.0.1.0 - on Sun Mar 19 22:20:36 2006
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Enter password:

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0

SQL> exec dbms_xdb.setftpport('2100');

PL/SQL procedure successfully completed.

SQL> alter system register;

System altered.

SQL> select dbms_xdb.getftpport as "FTP-Port" from dual;

FTP-Port
----------
2100

SQL> exit


(2) Modify the files via FTP:
www:oraclexe[XE]> ftp localhost 2100
Connected to localhost.localdomain.
220- www
Unauthorised use of this FTP server is prohibited and may
be subject to civil and criminal prosecution.
220 www FTP Server (Oracle XML DB/Oracle Database) ready.
Name (localhost:oraclexe): system
331 pass required for SYSTEM
Password:
230 SYSTEM logged in
Remote system type is Unix.
ftp> cd i/themes
250 CWD Command successful
ftp> dir
200 PORT Command successful
150 ASCII Data Connection
-rw-r--r-- 1 SYS oracle 3075 OCT 10 03:41 generic_list.gif
-rw-r--r-- 1 SYS oracle 1307 OCT 10 03:41 generic_nochild.gif
-rw-r--r-- 1 SYS oracle 1463 OCT 10 03:41 generic_open.gif
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 opal
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 otn
-rw-r--r-- 1 SYS oracle 216 OCT 10 03:41 rollup_minus_dgray.gif
-rw-r--r-- 1 SYS oracle 215 OCT 10 03:41 rollup_plus_dgray.gif
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_1
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_10
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_11
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_12
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_2
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_3
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_4
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_5
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_6
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_7
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_8
drw-r--r-- 2 SYS oracle 0 OCT 10 03:41 theme_9
226 ASCII Transfer Complete
ftp> bye
221 QUIT Goodbye.
www:oraclexe[XE]>

(3) Disable FTP access for security:

www:oraclexe[XE]> sqlplus system@xe

SQL*Plus: Release 10.2.0.1.0 - on Sun Mar 19 22:24:28 2006

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Enter password:

Connected to:
Oracle Database 10g Express Edition Release 10.2.0.1.0

SQL> exec dbms_xdb.setftpport('0');

PL/SQL procedure successfully completed.

SQL> alter system register;

System altered.

SQL> exit


~Dietmar.