[英]Oracle SQL Developer PL/SQL return an array
開發者,
我到處都搜索,但我找不到解決這個簡單問題的方法。
情況:
我需要編寫一個過程,其中以列名作為輸入,並將該列中存在的所有不同值作為輸出返回。 然后我必須在一些c#代碼中使用此過程。
在MS服務器中,它非常容易,因為它將直接提供與PL / SQL不同的結果集。
我可以寫的腳本(這不是給我我需要的結果):
CREATE OR REPLACE
PROCEDURE GetCol(PARAM IN STRING, recordset OUT sys_refcursor)
AS
BEGIN
OPEN recordset FOR
SELECT DISTINCT(PARAM)
FROM my_table;
END
;
當我嘗試使用以下代碼檢查記錄集中的數據時:
DECLARE
l_cursor SYS_REFCURSOR;
l_sname VARCHAR2(50);
BEGIN
GetCol('col_name',l_cursor);
LOOP
FETCH l_cursor INTO l_sname;
EXIT WHEN l_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_sname);
END LOOP;
CLOSE
請有人幫我解決這個問題。
您還可以為字符串值打開ref_cursor。 請看看這個:
CREATE OR REPLACE PROCEDURE GetCol(PARAM IN VARCHAR2, recordset OUT sys_refcursor)
AS
QRY varchar2(100);
BEGIN
QRY := 'SELECT DISTINCT '||PARAM||' FROM my_table';
OPEN recordset FOR QRY;
END;
然后:
DECLARE
l_cursor SYS_REFCURSOR;
l_sname VARCHAR2(50);
BEGIN
GetCol('col_name',l_cursor);
LOOP
FETCH l_cursor INTO l_sname;
EXIT WHEN l_cursor%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(l_sname);
END LOOP;
END;
您的問題是由於程序的SELECT語句中PARAM
的含糊不清引起的:
CREATE OR REPLACE
PROCEDURE GetCol(PARAM IN STRING, recordset OUT sys_refcursor)
AS
BEGIN
OPEN recordset FOR
SELECT DISTINCT(PARAM) -- Ambiguity here
FROM my_table;
END;
PARAM
是指表格列還是程序的第一個參數? Oracle已經采用了該參數。 你可以明確地說出這樣的:
SELECT DISTINCT(my_table.PARAM)
FROM my_table;
您可以在適當的情況下(可能不在此處)指定過程參數:
SELECT DISTINCT(GetCol.PARAM)
FROM my_table;
通常,最好通過以下方式避免:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.