1. 程式人生 > >SQL2008 連結Oracle 呼叫儲存過程

SQL2008 連結Oracle 呼叫儲存過程

  最近接觸了兩個專案都用到了SQL與Oracle資料互通,其中一個數據同步還要呼叫ORACLE中的儲存過程來執行相應的操作。

1. SQL連結ORACLE 都是視覺化的操作 如下圖:
這裡寫圖片描述

紅色框選的是oracle的資料驅動,如果沒有這個驅動 那需要單獨安裝oracle的client端 裝完以後就有了。

2.在建立之前,在SQLSERVER中,連結伺服器->訪問介面->OraOLEDB.Oracle->右鍵屬性,選中 “Allow inprocess” (中文為:允許程序內)
這裡寫圖片描述

這一步是使我們選擇的OraOLEDB.Oracle介面開啟執行操作。
如未設定會報如下錯誤:“無法初始化連結伺服器 “null” 的 OLE DB 訪問介面 “OraOLEDB.Oracle” 的資料來源物件”

3.建立好連結服務就可以在SQL端通過語句查詢oracel的資料了 提供了兩種查詢方式
1. SELECT* FROM 連結伺服器名字..登入使用者名稱.表名 注意:必須要全大寫
這種方式可以進行操作,優點是使用簡單,一目瞭然,而缺點是效能太差,查詢大資料量表很慢。效率太差。
2. select * from openquery(連結伺服器名字,’select * from oracle_table_name’);
帶查詢引數:select * from openquery(連結伺服器名字,’select * from test’) where test_id=10; test_id 是test表的欄位
關於連結服務查詢 推薦方式2 速度更快。

4.SQL呼叫oracle的儲存過程

--oracle建立儲存過程
CREATE OR REPLACE PROCEDURE SHOW_PROC(DEPT_NO INT, V_NAME OUT VARCHAR) IS
BEGIN
    SELECT D.DNAME INTO V_NAME FROM DEPT D WHERE D.DEPTNO = DEPT_NO;
END;

一個傳入引數 一個返回引數。就是通過部門ID 返回部門名字

SQL端呼叫

declare @DEPTNO INT;--傳入引數
declare @V_NAME VARCHAR(20);--返回引數
SET @DEPTNO=10;
-- 呼叫儲存過程 EXEC('BEGIN SHOW_PROC(?,?);END;',@DEPTNO,@V_NAME output) at NC
; print(@V_NAME);

這裡要注意返回引數,一定要加上Output,不然會報錯。