Přes dg4odbc je vlastně možné volat uložené procedury nebo funkce. Testoval jsem Bránu databáze pro MS SQL Server a stejně nativně nepodporuje funkce tabulky/skalární hodnoty SQL Serveru. Oba se musí spolehnout na DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE pro tuto funkci. Potřebovali jsme získat ID vložených řádků:
DECLARE
RESULT NUMBER(8,2);
val INTEGER;
c INTEGER;
nr INTEGER;
BEGIN
RESULT := DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@mssqldb('select SCOPE_IDENTITY();');
c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@mssqldb;
DBMS_HS_PASSTHROUGH.PARSE@mssqldb(c, 'select @@IDENTITY');
LOOP
nr := DBMS_HS_PASSTHROUGH.FETCH_ROW@mssqldb(c);
EXIT WHEN nr = 0;
DBMS_HS_PASSTHROUGH.GET_VALUE@mssqldb(c, 1, val);
END LOOP;
DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@mssqldb(c);
DBMS_OUTPUT.PUT_LINE('retrieved: ' || val);
END;