1

動的クエリを実行して結果を返すためにrefカーソルを取得しようとしています。これが私がやろうとしていることの例です:

DECLARE
    TYPE CUR_DATA IS REF CURSOR;
    OUT_DATA CUR_DATA;
    SQL_Statement       NVARCHAR2(8000);
BEGIN
    SQL_Statement := ' SELECT * FROM dual ';        
    OPEN OUT_DATA FOR SQL_Statement;
END;

なぜこれは私に次のようなエラーを与えるのですか:式は間違ったタイプですか?この参照カーソルは弱いタイプですよね?ヘルプ!

4

1 に答える 1

1

Oracleドキュメントでは、ステートメントが、、、または()をサポートしていると記載されていSelectます。で実装したい場合、私が知っている唯一の解決策は、 USING引数がcharをデータベースの文字セットに変換することです。出力データ型はです。CHARVARCHAR2CLOBnot NCHAR or NVARCHAR2NVARCHARtranslateCHAR_CSVARCHAR2

DECLARE
    TYPE CUR_DATA IS REF CURSOR;
    OUT_DATA CUR_DATA;
    SQL_Statement       NVARCHAR2(4000); --declare this as VARCHAR2
    SQL_Statement_var       VARCHAR2(4000);
BEGIN
    SQL_Statement := N'SELECT * FROM dual ';        
    SQL_Statement_var := TRANSLATE(SQL_Statement USING CHAR_CS);
    OPEN OUT_DATA FOR SQL_Statement_var;
END;

No errors.

NVARCHAR2必須でない場合は、提供されている基本的なデータ型で作成してみてください。

DECLARE
    TYPE CUR_DATA IS REF CURSOR;
    OUT_DATA CUR_DATA;
    SQL_Statement       VARCHAR2(4000); --declare this as VARCHAR2
BEGIN
    SQL_Statement := ' SELECT * FROM dual ';        
    OPEN OUT_DATA FOR SQL_Statement;
END; 

参照:

翻訳...使用

ステートメントのために開く

于 2012-04-05T19:28:41.873 に答える