當你運行你的代碼塊時,它不返回任何行。但是,它確實會返回一個指向可以使用該遊標變量cur
訪問的某些行的cursor
- 它是一個OUT
參數,表示該過程設置了它的值,並且在過程完成時,可以使用光標cur
準備查詢這樣的:
LOOP
FETCH cur INTO your_variable1, your_variable2, ..., your_variableN;
EXIT WHEN cur%NOTFOUND;
-- process fetched values
END LOOP;
我不知道一個程序返回一個指針OUT參數將允許您使用SSIS查詢數據,不幸的是我不能測試它自己。
我想出了一個可能的解決方案,但它可能會過度。你可以詢問編寫該程序的人爲你寫一個PIPELINED
函數。這樣的函數可以在查詢的FROM
子句中使用,因此您可以在Oracle數據庫中創建一個可以從該函數獲取數據的視圖,而在您的SSIS包中,您只需查詢該視圖即可。下面是一個例子,也可在SQLFiddle:http://sqlfiddle.com/#!4/c66c7/1
CREATE TABLE emp (id NUMBER, name VARCHAR2(20));
INSERT INTO emp VALUES (1, 'John');
INSERT INTO emp VALUES (2, 'Jake');
CREATE OR REPLACE TYPE emp_rec_t AS OBJECT (
id NUMBER,
name VARCHAR2(20)
);
CREATE OR REPLACE TYPE my_emp_array_t IS TABLE OF emp_rec_t;
CREATE OR REPLACE PROCEDURE my_emp_ref_func(o_emp_cur OUT sys_refcursor)
IS
BEGIN
OPEN o_emp_cur FOR 'SELECT id, name FROM emp';
END;
/
CREATE OR REPLACE FUNCTION my_emp_func RETURN my_emp_array_t PIPELINED
IS
v_emp_cur sys_refcursor;
v_id NUMBER;
v_name VARCHAR2(20);
BEGIN
my_emp_ref_func(v_emp_cur);
LOOP
FETCH v_emp_cur INTO v_id, v_name;
EXIT WHEN v_emp_cur%NOTFOUND;
PIPE ROW (emp_rec_t(v_id, v_name));
END LOOP;
END;
/
CREATE OR REPLACE VIEW my_emp_cur_view AS
SELECT id, name
FROM TABLE(my_emp_func)
;
「1.I是微軟SQL專家」 - 這是一個很大的來電! :) –
@MitchWheat精選Mitch。但是如果你以比較的方式瞭解我對Oracle的瞭解,那麼你會同意這一點。 :) – RRR