Calling SQL Server stored procedures from Oracle
In SQL Server, create and populate a sample table.
CREATE TABLE
    EMP (
        EMPNO FLOAT (4) NOT NULL PRIMARY KEY,
        ENAME VARCHAR(10),
        JOB VARCHAR(9),
        MGR FLOAT (4),
        HIREDATE DATE,
        SAL NUMERIC(7, 2),
        COMM NUMERIC(7, 2),
        DEPTNO NUMERIC(2)
    );
INSERT INTO
    EMP
VALUES
    (
        7369,
        'SMITH',
        'CLERK',
        7902,
        '12-17-1980',
        800,
        NULL,
        20
    )
INSERT INTO
    EMP
VALUES
    (
        7499,
        'ALLEN',
        'SALESMAN',
        7698,
        '02-20-1981',
        1600,
        300,
        30
    )
INSERT INTO
    EMP
VALUES
    (
        7521,
        'WARD',
        'SALESMAN',
        7698,
        '02-01-1981',
        1250,
        500,
        30
    )
INSERT INTO
    EMP
VALUES
    (
        7566,
        'JONES',
        'MANAGER',
        7839,
        '04-02-1981',
        2975,
        NULL,
        20
    )
INSERT INTO
    EMP
VALUES
    (
        7654,
        'MARTIN',
        'SALESMAN',
        7698,
        '09-28-1981',
        1250,
        1400,
        30
    )
INSERT INTO
    EMP
VALUES
    (
        7698,
        'BLAKE',
        'MANAGER',
        7839,
        '05-01-1981',
        2850,
        NULL,
        30
    )
INSERT INTO
    EMP
VALUES
    (
        7782,
        'CLARK',
        'MANAGER',
        7839,
        '06-09-1981',
        2450,
        NULL,
        10
    )
INSERT INTO
    EMP
VALUES
    (
        7788,
        'SCOTT',
        'ANALYST',
        7566,
        '12-09-1982',
        3000,
        NULL,
        20
    )
INSERT INTO
    EMP
VALUES
    (
        7839,
        'KING',
        'PRESIDENT',
        NULL,
        '11-17-1981',
        5000,
        NULL,
        10
    )
INSERT INTO
    EMP
VALUES
    (
        7844,
        'TURNER',
        'SALESMAN',
        7698,
        '09-08-1981',
        1500,
        0,
        30
    )
INSERT INTO
    EMP
VALUES
    (
        7876,
        'ADAMS',
        'CLERK',
        7788,
        '01-12-1983',
        1100,
        NULL,
        20
    )
INSERT INTO
    EMP
VALUES
    (
        7900,
        'JAMES',
        'CLERK',
        7698,
        '12-03-1981',
        950,
        NULL,
        30
    )
INSERT INTO
    EMP
VALUES
    (
        7902,
        'FORD',
        'ANALYST',
        7566,
        '12-03-1981',
        3000,
        NULL,
        20
    )
INSERT INTO
    EMP
VALUES
    (
        7934,
        'MILLER',
        'CLERK',
        7782,
        '01-23-1982',
        1300,
        NULL,
        10
    )
        Create a stored procedure that returns the data from this table. We will be calling this procedure from Oracle.
CREATE PROCEDURE ReturnEmployees AS BEGIN
SELECT
    *
FROM
    EMP
END
        In SQL*Plus, use the following DBMS_HS_PASSTHROUGH functions to execute the stored procedure and display the results. In the example, sqlserverlink is the name of a database link that uses DG4ODBC and Easysoft's SQL Server ODBC driver to connect to SQL Server.
$ ./sqlplus / as sysdba SQL> set echo on; set serveroutput on; DECLARE c INTEGER; R1 INTEGER; SOUT varchar2(100); C1 INTEGER; BEGIN c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@sqlserverlink; DBMS_HS_PASSTHROUGH.PARSE@sqlserverlink(c,'exec ReturnEmployees'); LOOP R1 := DBMS_HS_PASSTHROUGH.FETCH_ROW@sqlserverlink (c); EXIT WHEN R1 = 0; DBMS_HS_PASSTHROUGH.GET_VALUE@sqlserverlink (c, 1, SOUT); DBMS_OUTPUT.PUT_LINE(SOUT); END LOOP; DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@sqlserverlink(c); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@sqlserverlink(c); END; / SQL> 7369 7499 7521 7566 7654 7698 7782 7788 7839 7844 7876 7900 7902 7934 PL/SQL procedure successfully completed. SQL>