English Text below PolishTak, w pewnym sensie jest to możliwe. I nie jest to tak naprawdę kwestia apex-a tylko samej bazy Oracle. Opiszę poniżej jak stworzyć Interaktywny raport oparty o tabele MSSQLServera. W teście posłużyłem się bazą danych Oracle XE oraz SQL Server 2005 Express Edition, z pewnością opisany sposób będzie można wykorzystać w innych wersjach Oracle i SQL Servera. W poniższym opisie wykorzystałem tabelę EMP znajdującą się w bazie SQL Servera
Krok 1 - Konfiguracja ODBC dla SQL Servera
W tym celu należy wejść do Narzędzi Administracyjnych (w Panelu sterowania), następnie wybrać Źródła danych (ODBC), przejść do zakładki systemowe DSN i dodać nowe źródło. Nie będę opisywał jak to się dokładnie robi w sieci jest mnóstwo przykładów jak dodać nowe źródło danych dla SQLServera. W naszym przykładzie źródło nazwane jest APEXODBC. Najważniejsze aby po stworzeniu źródła Test połączenia przeszedł pomyślnie.
Mając stworzone źródło danych możemy przejść do następnego kroku.
Krok 2 - Konfiguracja HSODBC (Heterogeneous Services Initialization File)
Co to takiego ? Jest to komponent dostarczany przez ORACLE, który służy jako łącznik między bazą Oracle a źródłem danych ODBC. Dzięki temu będzie można tworzyć Linki (Database Link) między oracle a innym systemami bazodanowymi, a co za tym idzie będziemy mogli wykonywać operacje DML (z wieloma ograniczeniami) z pozycji oracle na innych systemach.
HSODBC konfigurujemy w 3 krokach:
2.1 Konfiguracja inithsodbc.ora, plik ten znajduje się w $ORACLE_HOME/hs/admin/inithsodbc.ora. Ustawiamy w nim dwa parametry: HS_FDS_CONNECT_INFO (podajemy źródło ODBC dla SQL Servera) oraz HS_FDS_TRACE_LEVEL (wyłączamy)
# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.
#
# HS init parameters
#
#HS_FDS_CONNECT_INFO =
#HS_FDS_TRACE_LEVEL =
HS_FDS_CONNECT_INFO = APEXODBC
HS_FDS_TRACE_LEVEL = off
2.2 Konfigurujemy plik listener.ora, plik znajduje się $ORACLE_HOME/NETWORK/ADMIN. Pogrubionym tekstem pokazane są zmiany.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = hsodbc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = hsodbc)
)
)
2.3 Edytujemy plik tnsnames.ora znajdujący się w $ORACLE_HOME/NETWORK/ADMIN. Na samym dole dodajemy dodatkowy alias połączenia:
apexdbe.world =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost) (PORT = 1521)
)
(CONNECT_DATA =
(SID = hsodbc)
)
(HS=OK)
)
Mając przygotowane wszystkie pliki restartujemy listenera. Wchodzimy w linie poleceń i uruchamiamy następujące komendy.
/> lsnrctl stop
/> lsnrctl start
Od tej chwili Oracle powinien widzieć w nasłuchu bazę SQL Servera jak własną : )
Krok 3 Konfiguracja Linka Bazodanowego
Aby móc wykonywać polecenia w SQL plusie na danych z sql servera musimy stworzyć linka. W tym celu uruchamiamy następującą komendę:
create database link SQL_LINK using 'apexdbe.world';
po stworzeniu linka możemy śmiało uruchamiac polecenia sql odwołujące się np do table w SQL Serverze, w naszym przypadku chcąć zapytać o tabelę EMP uruchamiamy następujące polecenie:
select * from EMP@SQL_LINK
Krok 4 Tworzenie Interaktywnego Raportu opartego o tabelę EMP z bazy SQL Servera.
Tworzymy nowy region typu Report, wybieramy typ raportu Interaktywny a w zapytaniu podajemy następującą treść:
select * from EMP@SQL_LINK
Po przejściu wszystkich niezbędnych kroków otrzymujemy Piękny raport.
Podany przykład był tworzony jedynie na potrzeby "czy się da", więc jak widać się da. Jednak w produkcyjnym rozwiązaniu zastosowałbym tutaj raczej twarde przenosiny niezbędnych dany z SQL Servera do bazy Oracle-a (używając np materialized view) i dopiero tworzył raporty.
I jeszcze jedna uwaga. Nic nie stoi na przeszkodzie aby podłączyć się do innej bazy danych np PostgreSQL, Sybase, My SQL itd., jedynie co potrzebujesz to odpowiednie sterowniki ODBC
English textYes, You can. But this is no Apex topic but Oracle Database.
In my test environment I used Oracle XE and SQL Server 2005 Express Edition but I think you can use other versions too.
In SQL Server database I have EMP table, my goal is to create Interactive Report on EMP table.
Step 1 - SQL Server ODBC Configuration
Go to Administration Tools (in Control Panel), click ODBC Datasource, select System DSN Tab and add new source. I don’t want describe this process In detail as you can find many descriptions on the WEB (How create New data source for MS SQL Server). In my case I created source with APEXODBC name.
If you created Datasource you can go to next step.
Step 2 - HSODBC configuration (Heterogeneous Services Initialization File)
Oracle has provided a sample heterogeneous services init file within the $ORACLE_HOME/hs/admin directory. Thanks to it you can create database link connected to third party Database Engine (for example SQL Server)
HSODBC configuration in 3 steps:
2.1 Edit inithsodbc.ora, you can find this file here $ORACLE_HOME/hs/admin/inithsodbc.ora. You have to set two parameters: HS_FDS_CONNECT_INFO (name of SQL Servere ODBC datasource) HS_FDS_TRACE_LEVEL (trace off)
# This is a sample agent init file that contains the HS parameters that are
# needed for an ODBC Agent.
#
# HS init parameters
#
#HS_FDS_CONNECT_INFO =
#HS_FDS_TRACE_LEVEL =
HS_FDS_CONNECT_INFO = APEXODBC
HS_FDS_TRACE_LEVEL = off
2.2 Edit listener.ora, you can find it here $ORACLE_HOME/NETWORK/ADMIN. Bold fonts show changes
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = extproc)
)
(SID_DESC =
(SID_NAME = hsodbc)
(ORACLE_HOME = C:\oraclexe\app\oracle\product\10.2.0\server)
(PROGRAM = hsodbc)
)
)
2.3 Edit tnsnames.ora you can find it here $ORACLE_HOME/NETWORK/ADMIN. On the end of file you have to add new DSN:
apexdbe.world =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost) (PORT = 1521)
)
(CONNECT_DATA =
(SID = hsodbc)
)
(HS=OK)
)
If you done everything you can restart listener. In the cmd launch this commands:
/> lsnrctl stop
/> lsnrctl start
And now listener will see SQL Server Database (try use tnsping :) )
Step 3 Create Database Link
If you want ask SQL Server database from SQLPlus you have to create DB Link :
create database link SQL_LINK using 'apexdbe.world';
Now you can query EMP table from Oracle SQLPlus:
select * from EMP@SQL_LINK
Step 4 Create Interactive Report
Now you can create Interactive Report with Select command like above. There is no special steps.
In my case report look like:

This example works, but in my opinion if you need use data from other database in production enviroment in Apex, first you have to move data to Oracle (using Materialized views)and next build Apex elements.
We use SQL Server but you can use other database Postgres, MySQL, Sybase ... Only You need ODBC drivers for them.