3

開発者、

できる限り検索しましたが、この単純な問題の解決策が見つかりませんでした。

状況:

入力として列名を取り、その列に存在するすべての個別の値を出力として返すプロシージャを作成する必要があります。そして、いくつかの 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 

誰かがこのコードを手伝ってくれませんか。

4

2 に答える 2

3

文字列値の 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;
于 2015-02-06T18:49:46.533 に答える