1

我正在尝试获取一个引用游标来运行动态查询并返回结果。这是我正在尝试做的一个例子:

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 文档中提到SelectStatement 支持CHAR, VARCHAR2, 或CLOB( not NCHAR or NVARCHAR2)。如果你想实现,NVARCHAR那么我知道的唯一解决方案是translate 使用CHAR_CS参数将 char 转换为数据库字符集。输出数据类型是VARCHAR2.

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 回答