В SQL Server създайте и попълнете примерна таблица.
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)
Създайте съхранена процедура, която връща данните от тази таблица. Ще извикаме тази процедура от Oracle®.
CREATE PROCEDURE ReturnEmployees AS BEGIN SELECT * FROM EMP END
В SQL*Plus
, използвайте следния DBMS_HS_PASSTHROUGH
функции за изпълнение на съхранената процедура и показване на резултатите. В примера sqlserverlink
е името на връзка към база данни, която използва DG4ODBC и ODBC драйвера на Easysoft SQL Server за свързване към SQL Server.
$ ./sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Fri Oct 14 10:03:53 2016 Copyright (c) 1982, 2011, Oracle. All rights reserved. Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production 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>