{"id":2474,"date":"2012-02-24T03:39:00","date_gmt":"2012-02-24T02:39:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/"},"modified":"2012-02-24T03:39:00","modified_gmt":"2012-02-24T02:39:00","slug":"oracle-application-express-apex-41-a-migration-guide","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/","title":{"rendered":"Oracle Application Express (APEX) 4.1: a migration guide"},"content":{"rendered":"<p align=\"LEFT\">In this post, I will describe how to migrate from Oracle APEX 3.0 to Oracle APEX 4.1. I will also focus on some encountered problems as well as the new features of Oracle Application Express (APEX) 4.1.<\/p>\n<h3>Oracle APEX 4.1 &#8211; new features<\/h3>\n<p>Let&#8217;s start with the new features of Oracle APEX 4.1:<\/p>\n<ul>\n<li>Improved error handling and user-defined exception processing<\/li>\n<li>Application Express now supports the use of ROWID for updates, inserts, and deletes as an alternative to specifying primary keys<\/li>\n<li>Developers can now easily add the capability for end-users to load spreadsheet data into existing tables within an application<\/li>\n<li>The calendar wizards have been enhanced to include the ability to create an edit page as part of creating the calendar<\/li>\n<li>Building on their initial introduction in Release 4.0, the look and feel of web sheets in release 4.1 has been substantially improved and the controls redesigned to make it more intuitive for users<\/li>\n<\/ul>\n<p>A complete list of APEX&#8217;s new features can be found here: <a href=\"http:\/\/www.oracle.com\/technetwork\/developer-tools\/apex\/application-express\/apex-41-new-features-459652.html\">http:\/\/www.oracle.com\/technetwork\/developer-tools\/apex\/application-express\/apex-41-new-features-459652.html<\/a><\/p>\n<h3>Pre migration steps<\/h3>\n<p>As described in the introduction, the task is a migration from an apex 3.0 to an apex 4.1 environment. In order to prepare such a migration, it is best practice to start with a database backup and an applicative export as presented below. These steps can be really useful in case of problems or mistakes.<\/p>\n<p>Connection as admin on the \u00ab\u00a0apex_admin\u00a0\u00bb page:<a href=\"http:\/\/atchoum.brolliet.ch:7778\/pls\/apex\/apex_admin\"> http:\/\/server.domain:port\/pls\/apex\/apex_admin<\/a><\/p>\n<p style=\"margin-bottom: 0in;\">\u00a0<img decoding=\"async\" class=\"caption\" title=\"Apex Connection\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg\" alt=\"Apex Connection\" \/><\/p>\n<p align=\"JUSTIFY\">The first thing to do before doing any migration command is to export the workspace(s). According to the Oracle documentation, a workspace is &#8220;a virtual private database allowing multiple users to work within the same Oracle Application Express installation while keeping their objects, data and applications private.&#8221; In fact a workspace export contains user details such as username\/password, default schema, rights, e-mail address, etc.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Workspace export\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/002.jpg\" alt=\"Workspace export\" \/><\/p>\n<p align=\"JUSTIFY\">Then you have to select the workspace you want to export, in this specific case the schema name is \u00ab\u00a0BSANET\u00a0\u00bb.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Workspace Export\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/003.jpg\" alt=\"Workspace Export\" \/><\/p>\n<p align=\"JUSTIFY\">Depending on your platform, you have to choose between DOS and UNIX file format. Then you simply have to click on &#8220;Save File&#8221; to dump your workspace.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Apex Export\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/004.jpg\" alt=\"Apex Export\" \/><\/p>\n<p>Application(s) still have to be exported. An application is a collection of pages linked together using tabs, buttons, or hypertext links. To export the application(s) you have to connect to the following URL<a href=\"http:\/\/atchoum.brolliet.ch:7778\/pls\/apex\/\">: http:\/\/server.domain:port\/pls\/apex\/<\/a><\/p>\n<p style=\"margin-bottom: 0in;\"><img decoding=\"async\" class=\"caption\" title=\"APEX connection\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/005.jpg\" alt=\"APEX connection\" \/><\/p>\n<p align=\"JUSTIFY\">Once connected, you have to click on the application you wish to export. You then need to click on the export\/import tool and select &#8220;Export&gt;Application&#8221; as demonstrated below:<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Export Apex Application\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/006.jpg\" alt=\"Export Apex Application\" \/><\/p>\n<p>Select the right &#8220;File Format&#8221; according to your infrastructure and the click &#8220;Export Application&#8221;.<\/p>\n<p style=\"margin-bottom: 0in;\"><img decoding=\"async\" class=\"caption\" title=\"Apex Export File Format\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/007.jpg\" alt=\"Apex Export File Format\" \/><\/p>\n<p align=\"JUSTIFY\">Finally, before starting to install your new APEX version, it is best practice to also backup your apex directory.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><span style=\"font-family: courier new,courier;\"><a href=\"mailto:oracle@myserver:\/u00\/app\/\">oracle@myserver:\/u00\/app\/<\/a> [DEV112] tar -cvf apexbck.tar apex<\/span><\/p>\n<h3>Apex installation and migration<\/h3>\n<p>Once each workspace and application are exported and the directory is backed up, you can start the APEX migration safely.<\/p>\n<p align=\"JUSTIFY\">The first thing to check in order to migrate is your database version. Apex 4.1 is compatible with Oracle database starting from Oracle 10.2.0.3 as specified in the file apexins.sql<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><span style=\"font-family: courier new,courier;\">\u00a0<\/span><\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select * from v$version;\nBANNER\n-----------------------------------------------------------------------------\nOracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production\nPL\/SQL Release 11.2.0.1.0 - Production\nCORE\u00a0\u00a0\u00a0 11.2.0.1.0\u00a0\u00a0\u00a0\u00a0\u00a0 Production\nTNS for Linux: Version 11.2.0.1.0 - Production\nNLSRTL Version 11.2.0.1.0 - Production<\/pre>\n<p>Additionally, it is always good to know which is your current APEX version.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select version from dba_registry where comp_id='APEX';\nVERSION\n------------------------------\n3.0.0.00.20<\/pre>\n<p align=\"JUSTIFY\">Now, you can download APEX from the following URL: <a href=\"http:\/\/www.oracle.com\/technetwork\/developer-tools\/apex\/downloads\/index.html\">http:\/\/www.oracle.com\/technetwork\/developer-tools\/apex\/downloads\/index.html<\/a><\/p>\n<p>Copy your Apex zip file you just downloaded in the path you want to install it in (e. g.: ORACLE_BASE\/product\/) and then unzip it.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><span style=\"font-family: courier new,courier;\">oracle@myserver:\/home\/oracle\/ [DEV112] mv apex_4.1.zip \/u00\/app\/oracle\/product\/<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">oracle@myserver:\/u00\/app\/oracle\/product\/ [DEV112] unzip apex_4.1.zip<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">oracle@myserver:\/u00\/app\/oracle\/product\/ [DEV112] mv apex apex_4.1.0<\/span><\/p>\n<p>Create your tablespace(s) where you want to install the APEX application and the APEX file. In our case we specified the same tablespace, APEX_41.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; create tablespace APEX_41 datafile '\/u01\/oradata\/DEV112\/APEX_41.dbf' size 200M autoextend on maxsize 500M;\nTablespace created.<\/pre>\n<p>Finally, install APEX with the following script which is located in your &#8220;APEX_HOME&#8221; directory which in our case is \/u01\/app\/oracle\/product\/apex_4.1.0. The installer&#8217;s arguments are the following:<\/p>\n<p>Arguments:<br \/>\nPosition 1: Name of tablespace for Application Express application user<br \/>\nPosition 2: Name of tablespace for Application Express files user<br \/>\nPosition 3: Name of temporary tablespace<br \/>\nPosition 4: Virtual directory for APEX images<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; @apexins.sql APEX_41 APEX_41 TEMP \/i\/\n\u2026\n\u2026\n...Begin key object existence check 12:55:17\n...Completed key object existence check 12:55:17\n...Setting DBMS Registry 12:55:17\n...Setting DBMS Registry Complete 12:55:17\n...Exiting validate 12:55:17\ntiming for: Validate Installation\nElapsed: 00:03:09.62\ntiming for: Development Installation\nElapsed: 00:11:39.75\nDisconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production<\/pre>\n<p align=\"JUSTIFY\">Once the installation is finished, some post-installation tasks have to be performed. If you are using a Database Access Descriptor (DAD), you still have to specify where your images directory is located. If you miss this step, you will get a blank page even if you will probably see some HTML code in the page source:<\/p>\n<p><span style=\"font-family: courier new,courier;\">oracle@atchoum:\/home\/oracle\/ [DEV112] vi \/u00\/app\/oracle\/product\/10.2_comp\/Apache\/modplsql\/conf\/dads.conf<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">\u2026<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">\u2026<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">#Alias \/i\/\u00a0 &#8220;\/u00\/app\/apex\/images\/&#8221; #Old image directory<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">Alias \/i\/\u00a0 &#8220;\/u00\/app\/oracle\/product\/apex_4.1.0\/images\/&#8221; # New image directory<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">\u2026<\/span><br \/>\n<span style=\"font-family: courier new,courier;\">\u2026<\/span><\/p>\n<p>If you want to change your old password, you can execute the script \u00ab\u00a0apxchpwd.sql\u00a0\u00bb.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; @apxchpwd\nEnter a value below for the password for the Application Express ADMIN user.\nEnter a password for the ADMIN user\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 []\nSession altered.\n...changing password for ADMIN\nPL\/SQL procedure successfully completed.\nCommit complete.<\/pre>\n<p>According to APEX documentation: &#8220;By default, the ability to interact with network services is disabled in Oracle Database 11g release 1 or 2.&#8221; Therefore, if you are running Oracle Application Express with Oracle Database 11g release 1 or 2, you must use the new DBMS_NETWORK_ACL_ADMIN package to grant connect privileges to any host for the APEX_040100 database user. Failing to grant these privileges results in issues with:<\/p>\n<ul>\n<li>Sending outbound mail in Oracle Application Express. Users can call methods from the APEX_MAIL package, but issues arise when sending outbound email<\/li>\n<li>Using Web services in Oracle Application Express<\/li>\n<li>PDF\/report printing<\/li>\n<\/ul>\n<p align=\"JUSTIFY\">In order to avoid those issues, you have to execute the script below:<\/p>\n<p align=\"JUSTIFY\">DECLARE<br \/>\nACL_PATH\u00a0 VARCHAR2(4000);<br \/>\nACL_ID\u00a0\u00a0\u00a0 RAW(16);<br \/>\nBEGIN<br \/>\n&#8212; Look for the ACL currently assigned to &#8216;*&#8217; and give APEX_040100<br \/>\n&#8212; the &#8220;connect&#8221; privilege if APEX_040100 does not have the privilege yet.<br \/>\nSELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS<br \/>\nWHERE HOST = &#8216;*&#8217; AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;<br \/>\n&#8212; Before checking the privilege, ensure that the ACL is valid<br \/>\n&#8212; (for example, does not contain stale references to dropped users).<br \/>\n&#8212; If it does, the following exception will be raised:<br \/>\n&#8212;<br \/>\n&#8212; ORA-44416: Invalid ACL: Unresolved principal &#8216;APEX_040100&#8217;<br \/>\n&#8212; ORA-06512: at &#8220;XDB.DBMS_XDBZ&#8221;, line &#8230;<br \/>\n&#8212;<br \/>\nSELECT SYS_OP_R2O(extractValue(P.RES, &#8216;\/Resource\/XMLRef&#8217;)) INTO ACL_ID<br \/>\nFROM XDB.XDB$ACL A, PATH_VIEW P<br \/>\nWHERE extractValue(P.RES, &#8216;\/Resource\/XMLRef&#8217;) = REF(A) AND<br \/>\nEQUALS_PATH(P.RES, ACL_PATH) = 1;<br \/>\nDBMS_XDBZ.ValidateACL(ACL_ID);<br \/>\nIF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, &#8216;APEX_040100&#8217;,<br \/>\n&#8216;connect&#8217;) IS NULL THEN<br \/>\nDBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,<br \/>\n&#8216;APEX_040100&#8217;, TRUE, &#8216;connect&#8217;);<br \/>\nEND IF;<br \/>\nEXCEPTION<br \/>\n&#8212; When no ACL has been assigned to &#8216;*&#8217;.<br \/>\nWHEN NO_DATA_FOUND THEN<br \/>\nDBMS_NETWORK_ACL_ADMIN.CREATE_ACL(&#8216;power_users.xml&#8217;,<br \/>\n&#8216;ACL that lets power users to connect to everywhere&#8217;,<br \/>\n&#8216;APEX_040100&#8217;, TRUE, &#8216;connect&#8217;);<br \/>\nDBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(&#8216;power_users.xml&#8217;,&#8217;*&#8217;);<br \/>\nEND;<br \/>\n\/<br \/>\nCOMMIT;<\/p>\n<p>If you want to grant connect privilege only to the localhost you can replace:<\/p>\n<p><samp>HOST=&#8217;*\u00a0&#8216; and DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(&#8216;power_users.xml&#8217;,&#8217;*&#8217;);<\/samp><\/p>\n<p>by<\/p>\n<p><samp style=\"margin-bottom: 0in; font-style: normal; font-weight: normal;\">HOST=&#8217;localhost&#8217; and DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(&#8216;power_users.xml&#8217;,&#8217;localhost&#8217;);<\/samp><samp style=\"margin-bottom: 0in; font-weight: normal;\"><\/samp><\/p>\n<h3>Importing APEX workspaces<\/h3>\n<p>To import a workspace, you have to log in as administrator (admin user) using the following URL: http:\/\/server.domain:port\/pls\/apex\/apex_admin. Once logged in, you can import your workspace from the menu &#8220;Manage Workspaces&#8221;. You simply have to click on &#8220;Import Workspace&#8221;:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"caption\" title=\"Import Workspace\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/importworkspace.png\" alt=\"Import Workspace\" width=\"799\" height=\"368\" \/><\/p>\n<p>In the Import Workspace menu, you finally have to select your export\/import file containing the workspace description &#8211; and follow the assistant:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"caption\" title=\"Import Workspace\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/importworkspace2.png\" alt=\"Import Workspace\" width=\"800\" height=\"234\" \/><\/p>\n<h3>Importing APEX applications<\/h3>\n<p>Of course, you can import applications in your new APEX 4.1 environment. In order to import a schema you have to login into your workspace with your username\/password on the following URL: <a href=\"http:\/\/atchoum.brolliet.ch\">http:\/\/server.domain:port\/pls\/apex\/<\/a><\/p>\n<p style=\"margin-bottom: 0in;\"><img decoding=\"async\" class=\"caption\" title=\"Importing Apex Application\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/008.jpg\" alt=\"Importing Apex Application\" \/><\/p>\n<p align=\"JUSTIFY\">Once logged in, click on the \u201cApplication Builder\u201d icon.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Apex dev icon\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/009.jpg\" alt=\"Apex dev icon\" \/><\/p>\n<p align=\"JUSTIFY\">You should see all your applications on this screen and you have the possibility to import a new application.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Application import\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/010.jpg\" alt=\"Application import\" \/><\/p>\n<p align=\"JUSTIFY\">Now, you simply have to follow the assistant in order to import your application. Do not forget to specify the right character set.<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Apex character set\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/011.jpg\" alt=\"Apex character set\" \/><\/p>\n<p align=\"JUSTIFY\">Click &#8220;Next&#8221; and once all parameters are validated, you can finish by clicking \u201cInstall\u201d:<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"JUSTIFY\"><img decoding=\"async\" class=\"caption\" title=\"Apex Application Import\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/012.jpg\" alt=\"Apex Application Import\" \/><\/p>\n<h3 align=\"JUSTIFY\">Errors &amp; Problems &#8211; ORA-04042 and ORA-06512<\/h3>\n<p align=\"JUSTIFY\">In my example, I got the following errors the first time I started the apexins.sql script:<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\"><samp style=\"margin-bottom: 0in;\"><\/samp>User altered.\nUser altered.\nbegin\n*\nERROR at line 1:\nORA-04042: procedure, function, package, or package body does not exist\nORA-06512: at line 3<\/pre>\n<p><samp style=\"margin-bottom: 0in;\">\u00a0<\/samp><\/p>\n<p><samp style=\"margin-bottom: 0in;\">\u00a0<\/samp><\/p>\n<p>After some investigations, I found the following piece of code in the coreins.sql script which is launched by apexins.sql. UFROM was set with the value FLOWS_0301000 which was obviously wrong according to the APEX version (3.0.0.00.20).<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\">alter user ^APPUN account lock password expire;\nalter user FLOWS_FILES account lock password expire;\n--\n-- In the event of an upgrade, grant execute on the prior versions wwv_flows_version\n-- procedure to the current APEX schema\n--\nbegin\nif '^UPGRADE' = '2' then\n execute immediate 'grant execute on ^UFROM..wwv_flows_version to ^APPUN';\nend if;\nend;\n\/<\/pre>\n<p><samp>\u00a0<\/samp><\/p>\n<p>Indeed, I saw that several \u00ab FLOWS_0XXXXX \u00bb users were present in my database. That was the root cause of the error specified above.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select username from dba_users where lower(username) like 'flows%';\nUSERNAME\n------------------------------\nFLOWS_FILES\nFLOWS_030100\nFLOWS_030000<\/pre>\n<p>In order to know which is the right schema, I tried to get more information, such as objects present in each schema:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">SQL&gt; select object_name from dba_objects where owner='FLOWS_030100';\nno rows selected\nObviously the schema FLOWS_030100 was obsolete. I dropped it.\nSQL&gt; drop user FLOWS_030100 cascade;\nUser dropped.<\/pre>\n<p>Then you simply remove your installation with the script <em>apxremov.sql<\/em> and start the installation anew.<\/p>\n<h3>Conclusion<\/h3>\n<p>Oracle Application Express version 4.1 offers many possibilities and introduces a lot of new features, as described in the introduction. The new interface is easy and allows to develop professional applications quickly. I hope this documention will help you handle APEX migration projects. Note that if you want to test the new features and the interface, you can create a free account on <a href=\"http:\/\/apex.oracle.com\">http:\/\/apex.oracle.com<\/a>. <strong><br \/>\n<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u00a0<\/p>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">Oracle Application Express &#8211; APEX 4.1 Introduces many new features such as&nbsp;:<\/p>\n<ul>\n<li>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">Improved error handling \tand user-defined exception processing<\/p>\n<\/li>\n<li>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">Application Express now \tsupports the use of ROWID for updates, inserts and deletes as an \talternative to specifying primary keys<\/p>\n<\/li>\n<li>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">Developers can now \teasily add the capability for end-users to load spreadsheet data \tinto existing tables within an application<\/p>\n<\/li>\n<li>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">The calendar wizards \thave been enhanced to include the ability to create an Edit page as \tpart of creating the calendar<\/p>\n<\/li>\n<li>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">Building on their \tinitial introduction in Release 4.0, the look and feel of Websheets \tin Release 4.1 has been substantially improved and the controls \tredesigned to make it more intuitive for users<\/p>\n<\/li>\n<\/ul>\n<p style=\"margin-bottom: 0in;\" align=\"LEFT\">A complete list of APEX new features can be found on: <a href=\"http:\/\/www.oracle.com\/technetwork\/developer-tools\/apex\/application-express\/apex-41-new-features-459652.html\">http:\/\/www.oracle.com\/technetwork\/developer-tools\/apex\/application-express\/apex-41-new-features-459652.html<\/a><\/p>\n","protected":false},"author":10,"featured_media":2475,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[304,15,17],"type_dbi":[],"class_list":["post-2474","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-application-integration-middleware","tag-apex","tag-migration","tag-oracle-11g"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Oracle Application Express (APEX) 4.1: a migration guide - dbi Blog<\/title>\n<meta name=\"description\" content=\"Migration from Apex 3.0 to Apex 4.1 with export\/import possibilities and problems that can be encountered during the apex installation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Oracle Application Express (APEX) 4.1: a migration guide\" \/>\n<meta property=\"og:description\" content=\"Migration from Apex 3.0 to Apex 4.1 with export\/import possibilities and problems that can be encountered during the apex installation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2012-02-24T02:39:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"800\" \/>\n\t<meta property=\"og:image:height\" content=\"273\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Gr\u00e9gory Steulet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gr\u00e9gory Steulet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/\"},\"author\":{\"name\":\"Gr\u00e9gory Steulet\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/7609faada8e4d63e04a28ae29e227098\"},\"headline\":\"Oracle Application Express (APEX) 4.1: a migration guide\",\"datePublished\":\"2012-02-24T02:39:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/\"},\"wordCount\":1546,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/001.jpg\",\"keywords\":[\"APEX\",\"Migration\",\"Oracle 11g\"],\"articleSection\":[\"Application integration &amp; Middleware\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/\",\"name\":\"Oracle Application Express (APEX) 4.1: a migration guide - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/001.jpg\",\"datePublished\":\"2012-02-24T02:39:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/7609faada8e4d63e04a28ae29e227098\"},\"description\":\"Migration from Apex 3.0 to Apex 4.1 with export\\\/import possibilities and problems that can be encountered during the apex installation.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/001.jpg\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/001.jpg\",\"width\":800,\"height\":273},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/oracle-application-express-apex-41-a-migration-guide\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Oracle Application Express (APEX) 4.1: a migration guide\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/7609faada8e4d63e04a28ae29e227098\",\"name\":\"Gr\u00e9gory Steulet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g\",\"caption\":\"Gr\u00e9gory Steulet\"},\"description\":\"Gr\u00e9gory Steulet has more than ten years of experience in database and infrastructure management, engineering, and optimization. He is specialized in Oracle technologies and high availability solutions (Oracle DataGuard, Data Replication Block Device). His expertise also includes Avaloq banking applications, as well as the open source field (MySQL, Unix\\\/Linux, etc.). Gr\u00e9gory Steulet is \\\"Oracle Certified Professional 10g\\\", \\\"MySQL Cluster 5.1 Certified\\\", and \\\"Avaloq Certified Professional 2.6\\\". Prior to joining dbi services, Gr\u00e9gory Steulet was Senior Consultant at Trivadis in Lausanne. He also worked as IT Administrator at Box Telecom in Miami Beach, Florida (USA). Gr\u00e9gory Steulet has an Executive MBA from the International Institute of Management in Technology, Fribourg (CH). He also holds a Bachelor's Degree in Business Administration and Computer Science from the University of Applied Sciences Western Switzerland. His branch-related experience covers Telecommunications, Financial Services \\\/ Banking, Logistics, Pharma etc.\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/gregory-steulet\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Oracle Application Express (APEX) 4.1: a migration guide - dbi Blog","description":"Migration from Apex 3.0 to Apex 4.1 with export\/import possibilities and problems that can be encountered during the apex installation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/","og_locale":"en_US","og_type":"article","og_title":"Oracle Application Express (APEX) 4.1: a migration guide","og_description":"Migration from Apex 3.0 to Apex 4.1 with export\/import possibilities and problems that can be encountered during the apex installation.","og_url":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/","og_site_name":"dbi Blog","article_published_time":"2012-02-24T02:39:00+00:00","og_image":[{"width":800,"height":273,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg","type":"image\/jpeg"}],"author":"Gr\u00e9gory Steulet","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Gr\u00e9gory Steulet","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/"},"author":{"name":"Gr\u00e9gory Steulet","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098"},"headline":"Oracle Application Express (APEX) 4.1: a migration guide","datePublished":"2012-02-24T02:39:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/"},"wordCount":1546,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg","keywords":["APEX","Migration","Oracle 11g"],"articleSection":["Application integration &amp; Middleware"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/","url":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/","name":"Oracle Application Express (APEX) 4.1: a migration guide - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg","datePublished":"2012-02-24T02:39:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098"},"description":"Migration from Apex 3.0 to Apex 4.1 with export\/import possibilities and problems that can be encountered during the apex installation.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/001.jpg","width":800,"height":273},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/oracle-application-express-apex-41-a-migration-guide\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Oracle Application Express (APEX) 4.1: a migration guide"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098","name":"Gr\u00e9gory Steulet","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g","caption":"Gr\u00e9gory Steulet"},"description":"Gr\u00e9gory Steulet has more than ten years of experience in database and infrastructure management, engineering, and optimization. He is specialized in Oracle technologies and high availability solutions (Oracle DataGuard, Data Replication Block Device). His expertise also includes Avaloq banking applications, as well as the open source field (MySQL, Unix\/Linux, etc.). Gr\u00e9gory Steulet is \"Oracle Certified Professional 10g\", \"MySQL Cluster 5.1 Certified\", and \"Avaloq Certified Professional 2.6\". Prior to joining dbi services, Gr\u00e9gory Steulet was Senior Consultant at Trivadis in Lausanne. He also worked as IT Administrator at Box Telecom in Miami Beach, Florida (USA). Gr\u00e9gory Steulet has an Executive MBA from the International Institute of Management in Technology, Fribourg (CH). He also holds a Bachelor's Degree in Business Administration and Computer Science from the University of Applied Sciences Western Switzerland. His branch-related experience covers Telecommunications, Financial Services \/ Banking, Logistics, Pharma etc.","url":"https:\/\/www.dbi-services.com\/blog\/author\/gregory-steulet\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/2474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=2474"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/2474\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/2475"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=2474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=2474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=2474"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=2474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}