What is the DUAL Table in Oracle?

Complete IT Professional - Mon, 2016-07-04 06:00
Have you seen SQL statements with the word DUAL in them? Wondering what it is? Find out what the dual table in Oracle is in this article. The DUAL Table in Oracle You might have seen some SQL statements with the keyword DUAL in them. These would have been SELECT statements, and the DUAL keyword […]
Categories: Development

Oracle SOUNDEX Function with Examples

Complete IT Professional - Thu, 2016-06-30 16:46
The Oracle SOUNDEX function is one of the most interesting functions I’ve used in Oracle. Learn what it is and how it works in this article. Purpose of the Oracle SOUNDEX Function The Oracle SOUNDEX function allows you to check what a value sounds like. It returns a value that represents the phonetic value of […]
Categories: Development

The Importance of Routine

Complete IT Professional - Tue, 2016-06-28 17:08
In the last two weeks, I’ve learnt about the importance of a routine. How does it relate to your career, and why should you care? The Last Two Weeks So, you might have noticed there hasn’t been a post on Complete IT Professional in the last week or so. I mentioned there was a delay […]
Categories: Development

Chicago Oracle Meetup

Gerger Consulting - Tue, 2016-06-28 09:00
Are you in Chicago? We have an Oracle Professionals Meet-Up on June 30. I'll be there and would be happy to get to know you. Register at:

See you there!
Yalim K. Gerger
Categories: Development

How are you?

FeuerThoughts - Tue, 2016-06-28 06:26
I get this question a lot.

You probably do, too.

Sometimes nothing more is meant by it than "Hello."

Sometimes they really mean it, they really want to know.

Generally, my answer is "Great!"

'Cause no matter what relatively small irritations I have in my life, the bottom line is that my life is quite wonderful.

But I've decided that perhaps I should not simply say "Great!" I should explain why my life is so great.

So here goes:


I am an organic life form living on the only planet we know of in the entire universe that supports organic life. How wonderful is that?

Plus, I am self-aware, so I know that I am alive and can appreciate rainbows and the sound of wind moving through trees, and so on.* How incredible is that?

And, best of all, I have two smart, beautiful, hilarious, stubborn and funny granddaughters.**

So how am I?


* Note: just in case that sentence sounds as though I am celebrating the uniqueness of human beings, I must clarify that I happen to believe that many, many living creatures from thousands of species are self-aware and appreciate the world around them. Birds, spiders, squirrels, "etc" ....

** Photos are, of course, required to back this up:

Loey Lucille Silva

Juna Josephine Silva

Categories: Development

Complaining about the weather

FeuerThoughts - Sun, 2016-06-26 09:16
Seems like I hear people complaining about the weather a lot.

Too hot, too cold, too wet, too dry....

Seems to me that we should never complain about the weather. I refuse to complain about the weather. Why would I take this position?

So far there is just one planet that we know about in the universe that supports the kind of life we are: organic, carbon-based life.

"Weather" cannot be separated from this planet. So when you complain about the weather, you are complaining about the only place in the universe humans can even possibly, remotely live. 

Seems a bit mean spirited, from that perspective, to whine about rain (which is needed badly for us and trees and lots of other living things to survive).

Beyond all that, humans have spread across the entire planet, even (and often) to places that are hostile to human survival (places, in other words, that we did not evolve to live in).

In order to live in many of these places, we destroy chunks of those places to make them more hospitable, comfortable and convenient for us.

So it seems to me that when someone complains about the weather, we should ask:

Do you live in a location on Planet Earth that does not require the establishment of a "human survival zone"?

Indicators of Human Survival Zones: air conditioning so your brain doesn't fry; heat so that you don't turn into an ice cube; homes that seal you off completely from your surroundings....

If yes, then our response should be:
Wow! Aren't you lucky? You can breathe, you can drink water, you can eat the food, you can enjoy the natural environment with minimal degradation of that environment, and without dying. Why would you ever complain about the weather?
If no, the our response should be: 
You have no right to complain. You shouldn't even be here. You can only be here by radically changing (usually by destroying) the world around you. Which, by the way, affects the weather. If you don't like it here, then leave. But don't complain.And if none of that seems to be making a dent, you can always fall back on the Rainbow Argument:
How can you complain about the weather (and by extention a planet) that gives you rainbows? 
Categories: Development

[EM-01901] Internal error in EM Patch Advisor for Patchng using EM12cR5

Arun Bavera - Mon, 2016-06-20 23:33

I am trying to patch the DB ( APR2016_PSU ) on OEL 6 with Patch 20807398 from Note:2034610.1 using EM12cR5.

OMS side Patches

Agent Side Patches

OMS PSU APR Patch: 22570344
OMS System Side Bundle Patch: 23218275
Patch: BUG:21364690

Agent-Side (May 31, 2016) Patch 23124338
Agent-Side Monitoring 31, 2016) Patch 23217639
* Agent-Side Discovery (November 30, 2015) Patch 22135601

I get the below error, which is pointing to OMS HOME, I am analyzing Patch 20807398 on a DB Home!


EMlogs shows following exception:

2016-06-21 02:21:29,930 [RJob Step 115760] FATAL patch.InitSADB logp.251 - [EM-01901] Internal error in EM Patch Advisor

java.lang.NumberFormatException: For input string: "6000000000093016041902"

at java.lang.NumberFormatException.forInputString(

at java.lang.Long.parseLong(

at java.lang.Long.valueOf(

I have reviewed these notes:

ERROR: CHK-012: An Unexpected Exception Occurred when Patching Database (Doc ID 1951435.1)

EM 12c: Enterprise Manager 12c Cloud Control Patch Plan Fails when Checking Target Properties with Error: [EM-01901] Internal error in EM Patch A (Doc ID 1946028.1)


Download the patch manually to SoftwareLibrary , seems like this issue is with downloading patch automatically from EM.

Categories: Development

APEX UT - Display Image in a List

Denes Kubicek - Mon, 2016-06-20 07:34
If using universal theme, we can switch from a classic navigation bar to a list and display it where usually a navigation bar is displayes - right top of the page. The problem with the list is that it will escape any html code in the list name. If we want to display an image, we will get the html code. To go arround that problem, we can use the "user defined attributes" for the lists and put the image into the "Badge Value". This list will then display the image almost as expected. We will need to apply additional css to make the background of the "Badge Value" transparent and to adjust the font to the rest of the navigation bar list:

.t-Button--navBar .t-Button-badge {background-color: transparent !important; font-weight: 400 !important; font-size: 1.2rem !important}

This is then how it appears:

Here, we can add the "Badge Value":

Finaly, here we can change our navigation bar from classic to list or oposite:

Categories: Development

NoSQL for Oracle Developers

Gerger Consulting - Fri, 2016-06-17 07:16
Oracle Developers! Want to learn more about NoSQL, but don't know where to start? Look no further.

Attend our free webinar by the venerable Pramod Sadalage. He'll answer all the questions you have about NoSQL but were too afraid to ask. :-) 

After all, he wrote the book.

 Sign up at this link. 
Categories: Development

Patch analysis fails at step "Target Status" and at "Build Target Patch" for EM12cR5 GI+DB APR2016 Patches

Arun Bavera - Thu, 2016-06-16 14:10
Issue: Patch analysis fails at step "Target Status" and at "Build Target Patch" for EM12cR5 GI+DB APR2016 Patches
Patch to be applied for DB+GI for using EM Patch Automation
Description DB PSU GI PSU Proactive Bundle Patch APR2016 22291127 ( 22646084 ( includes 22291127 22899531 - 1.7GBFrom <>
Reference Notes:
DB Patches: Patch Set Updates - List of Fixes in each PSU (Doc ID 1924126.1) Patch Set - Availability and Known Issues (Doc ID 1683799.1)Quick Reference to Patch Numbers for Database PSU, SPU(CPU), Bundle Patches and Patchsets (Doc ID 1454618.1)From <> EM12c Patches:
Applying Enterprise Manager 12c Recommended Patches (Doc ID 1664074.1)
From <>
Enterprise Manager (PS4) Master Bundle Patch List (Doc ID 2038446.1)
Enterprise Manager Patches required for setting up Provisioning, Patching and Cloning (Deployment Procedures) (Doc ID 427577.1)

System Details:
EM DB Plugin
OMS side Patches Agent Side Patches OMS PSU APR Patch: 22570344
OMS System Side Bundle Patch: 23218275
Patch: BUG:21364690

Agent-Side (May 31, 2016) Patch 23124338
Agent-Side Monitoring 31, 2016) Patch 23217639
* Agent-Side Discovery (November 30, 2015) Patch 22135601

Steps Taken:
1. We started with GRID Infrastructure PSU APR2016 Patch in the lab cluster 22646084 (
During the EM Patch analysis we encountered mismatch between the targets configuration info collected from “EM Repository from agent” with “oplan” tool of OPatch.
Similar Bug(this issue  HAS having smallcase and UPPERcase with EM collection and Oplan collection, customer had uppercase shortname host in /etc/hosts)
BUG 20323468 - Run Configuration Compare fails with - invalid instances monitored by EM  -> BUG 21258331 - CONFIGURATIONCOMPARE SHOULD BE CASE INSENSITIVE REGARDING THE HOSTNAME
In our case we were seeing the discrapancies in targetname with FQDN and shortname

2. We then tried DB PSU 22291127 (, which failed in the step ‘Target Status Check’ which we determined as concurrency issue- we were able to overcome this by removing additional ClusterDBService and Patch analysis was successful for DB side patch only. We decided to create one more ClusterDBService to test again this DB PSU. If we retry this step one by one on each node we can overcome this concurrency.
Erros:Another datapatch session is currently running.
Waiting for that session to complete before continuing...
Queryable inventory could not determine the current opatch status.
Execute 'select dbms_sqlpatch.verify_queryable_inventory from dual' and/or check the invocation log /ora01/app/oracle/cfgtoollogs/sqlpatch/sqlpatch_54049_2016_06_16_14_37_26/sqlpatch_invocation.log for the complete error.
Prereq check failed, exiting without installing any patches.
Error Codes:ORA-20009: Job Load_opatch_inventory_1execution failedWe have a somewhat workaround, but to fully automate we need fix for:
b. Bug 19178275 - fixes concurrent access to QI when multiple DBs access it in a shared OH  - is not backported yet
c. Bug 20879709 - concurrency with dbms_qopatch apis with fixed table implementation  -  is not backported yet

3. We again tried troubleshooting GI PSU, we are able to find the root cause, as 2 of the nodes were referring to wrong Oracle Central Inventory. Where the EM patch analysis was failing during compare configuration step. We fixed this.
The GI PSU Patch plan failed at the last step: In the EMOMS.log related errors as:
2016-06-15 15:46:35,246 [RJob Step 250083] ERROR dpGenerator.MultiPatchProcessor logp.251 - 22646084{, root=/%emd_emstagedir%/p22646084_600000000009300_226_0/oracle, oracle=/%emd_emstagedir%/p22646084_600000000009300_226_0/oracle} 2
2016-06-15 15:48:26,137 [RJob Step 250083] ERROR dpIntg.BuildPrereqProcAndConfig logp.251 - Exception while building the prerequisite procedure
oracle.oplan.sdk.oplan.OPlanInternalException: Unsupported Action Type:oracle.opatch.system.automation.jaxb.CommandAction subtype:preRACPatchApplyshell
Error: oracle.opatch.system.automation.jaxb.CommandAction subtype:preRACPatchApplyshell

The first hit you get on this issue is: Bug 21919097 : The Prerequsite Checks Required by OPlan Fails With Unsupported Action Type  - Closed as not a bug due to issue in-à BUG 20950255 - UNABLE TO APPLY APR PSU VIA EM - FAILS AT ANALYSIS AND UNABLE TO PROCEED  -- This is fixed in  EM DB Plugin  ---- Which we have already applied

Another, fix which is required for this issue is in Patch:
Patch 21364690: Tracking bug to deliver one-off patch for oplan bugs 20978207 and 20995318 DB Plugin (OMS)
Action: Fix available at: – We need to apply this patch

We have two issue here:
4. Concurrency issue with “Target Status Check” step – We can check with support whether its related and get fixes for the BUGS: BUG 22204310, Bug 19178275 and 20879709
5. GI PSU failing in last but one step  - “building the prerequisite procedure “ - we applied the fix for 21364690 and it fixed the issue.

Categories: Development

APEX Modify UT Breadcrumb

Denes Kubicek - Tue, 2016-06-14 06:28
While creating pages with the new UT I noticed that the breadcrumb breakes after the second level and this takes too much space. This example shows how to go arround that problem with just a couple of css styling lines.

And this is how it looks like after applying the css.

Categories: Development

Oracle CURRENT_DATE Function with Examples

Complete IT Professional - Tue, 2016-06-14 06:00
The Oracle CURRENT_DATE function is another Oracle function for returning a date from the system. Find out what it does and how it’s different from the other functions in this article. Purpose of the Oracle CURRENT_DATE Function The CURRENT_DATE function is used to return the current date in the session timezone. The session timezone is […]
Categories: Development

8 queens chess problem: solution in Oracle SQL

XTended Oracle SQL - Sun, 2016-06-12 21:16

This is just another solution of this problem for a chessboard, but you can choose any size of the checkerboard:

 t as (select level i, cast(level as varchar2(1)) c from dual connect by level<=&d)
,x(l,s,n) as (
       select 1 l, c s, chr(97)||c||' ' from t
       union all
       select l+1, x.s||t.c, n||chr(98+l)||i||' '
       from x
            join t
                 on instr(s,c)=0
                    and not exists(select 0 from dual 
                                   where L+1 - t.i = level - substr(s,level,1)
                                      or L+1 + t.i = level + substr(s,level,1)
                                   connect by level<=length(s))
       where L<&d
select n
from x
where l=&d

SQL> @tests/f
Size[8]: 8

a1 c5 d8 e6 f3 g7 h2 i4
a1 c6 d8 e3 f7 g4 h2 i5
a1 c7 d4 e6 f8 g2 h5 i3
a1 c7 d5 e8 f2 g4 h6 i3
a2 c4 d6 e8 f3 g1 h7 i5
a2 c5 d7 e1 f3 g8 h6 i4
a2 c5 d7 e4 f1 g8 h6 i3
a2 c6 d1 e7 f4 g8 h3 i5
a2 c6 d8 e3 f1 g4 h7 i5
a2 c7 d3 e6 f8 g5 h1 i4
a2 c7 d5 e8 f1 g4 h6 i3
a2 c8 d6 e1 f3 g5 h7 i4
a3 c1 d7 e5 f8 g2 h4 i6
a3 c5 d2 e8 f1 g7 h4 i6
a3 c5 d2 e8 f6 g4 h7 i1
a3 c5 d7 e1 f4 g2 h8 i6
a3 c5 d8 e4 f1 g7 h2 i6
a3 c6 d2 e5 f8 g1 h7 i4
a3 c6 d2 e7 f1 g4 h8 i5
a3 c6 d2 e7 f5 g1 h8 i4
a3 c6 d4 e1 f8 g5 h7 i2
a3 c6 d4 e2 f8 g5 h7 i1
a3 c6 d8 e1 f4 g7 h5 i2
a3 c6 d8 e1 f5 g7 h2 i4
a3 c6 d8 e2 f4 g1 h7 i5
a3 c7 d2 e8 f5 g1 h4 i6
a3 c7 d2 e8 f6 g4 h1 i5
a3 c8 d4 e7 f1 g6 h2 i5
a4 c1 d5 e8 f2 g7 h3 i6
a4 c1 d5 e8 f6 g3 h7 i2
a4 c2 d5 e8 f6 g1 h3 i7
a4 c2 d7 e3 f6 g8 h1 i5
a4 c2 d7 e3 f6 g8 h5 i1
a4 c2 d7 e5 f1 g8 h6 i3
a4 c2 d8 e5 f7 g1 h3 i6
a4 c2 d8 e6 f1 g3 h5 i7
a4 c6 d1 e5 f2 g8 h3 i7
a4 c6 d8 e2 f7 g1 h3 i5
a4 c6 d8 e3 f1 g7 h5 i2
a4 c7 d1 e8 f5 g2 h6 i3
a4 c7 d3 e8 f2 g5 h1 i6
a4 c7 d5 e2 f6 g1 h3 i8
a4 c7 d5 e3 f1 g6 h8 i2
a4 c8 d1 e3 f6 g2 h7 i5
a4 c8 d1 e5 f7 g2 h6 i3
a4 c8 d5 e3 f1 g7 h2 i6
a5 c1 d4 e6 f8 g2 h7 i3
a5 c1 d8 e4 f2 g7 h3 i6
a5 c1 d8 e6 f3 g7 h2 i4
a5 c2 d4 e6 f8 g3 h1 i7
a5 c2 d4 e7 f3 g8 h6 i1
a5 c2 d6 e1 f7 g4 h8 i3
a5 c2 d8 e1 f4 g7 h3 i6
a5 c3 d1 e6 f8 g2 h4 i7
a5 c3 d1 e7 f2 g8 h6 i4
a5 c3 d8 e4 f7 g1 h6 i2
a5 c7 d1 e3 f8 g6 h4 i2
a5 c7 d1 e4 f2 g8 h6 i3
a5 c7 d2 e4 f8 g1 h3 i6
a5 c7 d2 e6 f3 g1 h4 i8
a5 c7 d2 e6 f3 g1 h8 i4
a5 c7 d4 e1 f3 g8 h6 i2
a5 c8 d4 e1 f3 g6 h2 i7
a5 c8 d4 e1 f7 g2 h6 i3
a6 c1 d5 e2 f8 g3 h7 i4
a6 c2 d7 e1 f3 g5 h8 i4
a6 c2 d7 e1 f4 g8 h5 i3
a6 c3 d1 e7 f5 g8 h2 i4
a6 c3 d1 e8 f4 g2 h7 i5
a6 c3 d1 e8 f5 g2 h4 i7
a6 c3 d5 e7 f1 g4 h2 i8
a6 c3 d5 e8 f1 g4 h2 i7
a6 c3 d7 e2 f4 g8 h1 i5
a6 c3 d7 e2 f8 g5 h1 i4
a6 c3 d7 e4 f1 g8 h2 i5
a6 c4 d1 e5 f8 g2 h7 i3
a6 c4 d2 e8 f5 g7 h1 i3
a6 c4 d7 e1 f3 g5 h2 i8
a6 c4 d7 e1 f8 g2 h5 i3
a6 c8 d2 e4 f1 g7 h5 i3
a7 c1 d3 e8 f6 g4 h2 i5
a7 c2 d4 e1 f8 g5 h3 i6
a7 c2 d6 e3 f1 g4 h8 i5
a7 c3 d1 e6 f8 g5 h2 i4
a7 c3 d8 e2 f5 g1 h6 i4
a7 c4 d2 e5 f8 g1 h3 i6
a7 c4 d2 e8 f6 g1 h3 i5
a7 c5 d3 e1 f6 g8 h2 i4
a8 c2 d4 e1 f7 g5 h3 i6
a8 c2 d5 e3 f1 g7 h4 i6
a8 c3 d1 e6 f2 g5 h7 i4
a8 c4 d1 e3 f6 g2 h7 i5

92 rows selected.


It works quite fast:
8*8 ~ 0.1s
9*9 ~ 0.6s
10*10 ~4s

script for sqlplus
set arrays 1000;
col n for a80;
accept d prompt "Size[8]: " default 8;
 t as (select/*+inline*/ level i, cast(level as varchar2(2)) c from dual connect by level<=&d)
,x(l,s,n) as (
       select 1 l, c s, chr(97)||c||' ' from t
       union all
       select l+1, x.s||t.c, n||chr(98+l)||i||' '
       from x
            join t
                 on instr(s,c)=0
                    and not exists(select 0 from dual 
                                   where L+1 - t.i = level - substr(s,level,1)
                                      or L+1 + t.i = level + substr(s,level,1)
                                   connect by level<=length(s))
       where L<&d
select n
from x
where l=&d
col n clear;

Categories: Development

Enter your bets on now

Dimitri Gielis - Fri, 2016-06-10 05:55
Looks like I forgot to put on my blog also this year we created a bet site for the European Cup Soccer. Thanks to the people who reminded me to put this post on my blog :)

It all started in 2006 when I first created a site to promote Oracle Application Express (APEX). The site allowed to bet on the games of the World Cup. At that time everybody was using Excel files internally to put the scores together, enter the bets of the people... so I thought why not build it in APEX :) Oh the betting is for fun and honour ... so no money involved!

Since then every two years we have updated the site and enabled it again. Today almost 3000 people are playing with us. We changed a few times from url; first it was called DG Tournament, than the World Cup Challenge and this year it's the Euro 2016 Challenge.

So if you didn't put your bets in, there're a few hours left ... happy betting and that the best may win!

This year we (Belgium) have a chance to come far in the tournament, go go go Belgium! :)

Categories: Development

Oracle USERENV Function with Examples

Complete IT Professional - Thu, 2016-06-09 06:00
The Oracle USERENV function allows you to get information about the current session. Learn how to use the USERENV function in this article. Purpose of the Oracle USERENV Function The purpose of the USERENV function is to get information about your current session. It’s a simple function but can take a few different values for […]
Categories: Development

Export your APEX Interactive Report to PDF

Dimitri Gielis - Tue, 2016-06-07 10:36
Interactive Reports (and Grids in 5.1) are one of the nicest features of Oracle Application Express (APEX) as it allows an end-user to look at the data the way they want, without needing a developer to change the underlying code. End-users can show or hide columns, do calculations on columns, filter etc.

Here's an example of an interactive report where highlighting, computation and aggregation is used.

More than once I get the question, how can I export this to PDF or print this Interactive Report?

Here're 3 ways of doing this:

1. Use your browser to Print to PDF

The challenge here's that you would need to add some specific CSS to get rid of the items you don't want to be printed, e.g. the menu, the header and footer and some other components like buttons.
Also if you have many columns, they might not fit on the page and the highlighting is not working when printed, but if you can live with that, it might be an option for you.

Here's the CSS you can use:

@media print {

  .t-Body-nav {

2. Use the download feature of the Interactive Report itself (Actions > Download > PDF)

This feature is build-in APEX and relies on a print server supporting XSL-FO; when using ORDS it will automatically work. If you're using Apache, you will need to configure a print server like BI Publisher or Apache-FOP.

When downloading to PDF, the result looks like this:

The PDF contains the data and we can specify a header, footer and how the columns look like, but we lost many features of the Interactive Report; no highlighting, no computation or aggregation.

3. Use APEX Office Print to print the Interactive Report in your own template defined in MS Word.

One of the unique features of APEX Office Print is that it's tightly integrated with Oracle Application Express and that it understands Interactive Reports as the source of your data.

Here're the steps:

- Create your template in MS Word and add {&interactive} tag where you want the Interactive Report to be

- Give your Interactive Report a static id:

- Add the APEX Office Print Process Plugin to your page and specify the template and the static id: 

And here's the result: 

I'm biased as we created APEX Office Print (AOP), but I just find it awesome :)
In your Word template you just add one tag, that's it!

In all seriousness, we would really want to hear from you if this feature works for your Interactive Report. You can try AOP for free for 100 days. We're trying to be smart and are doing automatic calculations of the column width, but we probably can improve it even more. We introduced this feature with AOP v2.0 (MAR-16) and improved it in v2.1 (MAY-16).

Categories: Development

What Are Oracle SQL Analytic Functions?

Complete IT Professional - Mon, 2016-06-06 06:00
In this article, I explain what Oracle SQL analytic functions are, how they are different from other functions, and show you some examples. What Are Oracle SQL Analytic Functions? Analytic functions are functions that calculate an aggregate value based on a group of rows. A recent article I wrote on SQL aggregate functions mention that […]
Categories: Development

5.1 EA

Denes Kubicek - Sun, 2016-06-05 05:08
It is incredibly quiet around APEX release 5.1. Just a couple of days ago I was talking to Dietmar and we were asking ourselves when is APEX 5.1 going to be released because of our training schedule for the rest of the year. On Tuesday this week Markus visited the EA site and this is what he found there. Many exciting things to appear in the next versions. Read the details and you will get an idea about what is comming.
Categories: Development

New APEX Blog

Denes Kubicek - Sun, 2016-06-05 04:59
Markus Hohloch is a new blogger is the growing APEX community. He is a part of our APEX Experts team and he is blogging mainly in german. He has a couple of interesting postings. Have a look.

Categories: Development

Getting MultiPath Failed Status count using EM12c/EM13c Metric Extension

Arun Bavera - Thu, 2016-06-02 14:06
Customer has requirement to alert if the multipath count goes down from 4.

Command to get the count as privileged User:
multipathd list multipaths status | awk '{print $1"|"$4}'

Once you add this metric Extension as part of your Standard Template, only requirement is to have this executed as Privileged Named Credential  or give access to your normal user say 'oracle' the ability to execute multipathd restricting options in /etc/sudo or put that in a shell script in restricted folder and give access to execute only that shell script.


Categories: Development


Subscribe to Oracle FAQ aggregator - Development