Oracle ORA-12714:指定的国家字符集无效

Oracle ORA-12714:指定的国家字符集无效,oracle,function,plsql,Oracle,Function,Plsql,我在oracle数据库中遇到了一个问题,我创建了一个存储过程,我想将一个项目ID数组传递给这个过程,以便使用“in”子句根据项目数组选择数据,我发现可用的解决方案是创建一个函数,并传递一个字符串值,其中所有项目ID用逗号分隔,此函数将返回一个datatble,其中每个项id对应一行。当我在select语句的toad中尝试此方法时,此方法效果良好,但当我在存储过程中使用它时,会出现一个奇怪的错误 “ORA-12714:指定的国家字符集无效” 在搜索该错误的原因后,我发现根据本页,这是oracle版

我在oracle数据库中遇到了一个问题,我创建了一个存储过程,我想将一个项目ID数组传递给这个过程,以便使用“in”子句根据项目数组选择数据,我发现可用的解决方案是创建一个函数,并传递一个字符串值,其中所有项目ID用逗号分隔,此函数将返回一个datatble,其中每个项id对应一行。当我在select语句的toad中尝试此方法时,此方法效果良好,但当我在存储过程中使用它时,会出现一个奇怪的错误

“ORA-12714:指定的国家字符集无效”

在搜索该错误的原因后,我发现根据本页,这是oracle版本中的一个错误,在10.2.0.4 oracle修补程序中修复了该错误,确切原因是为返回数据表的函数声明了一个游标

由于我无法让在实时生产环境中工作的用户停止服务器应用更新补丁,我想知道是否有Oracle专家可以帮助我声明一个游标并返回该游标,而不是返回表

我的甲骨文功能,提前感谢

create or replace

FUNCTION SplitIDs(
      v_List IN VARCHAR2)
    RETURN RtnValue_Set PIPELINED
  AS
    SWV_List VARCHAR2(2000);
    v_RtnValue Dt_RtnValue := Dt_RtnValue(NULL);
  BEGIN
    SWV_List                  := v_List;
    WHILE (instr(SWV_List,',') > 0)
    LOOP
      FOR RetRow                                               IN
      (SELECT ltrim(rtrim(SUBSTR(SWV_List,1,instr(SWV_List,',') -1))) SelectedValue
      FROM dual
      )
      LOOP
        v_RtnValue.SelectedValue := RetRow.SelectedValue;
        PIPE ROW(v_RtnValue);
      END LOOP;
      SWV_List := SUBSTR(SWV_List,instr(SWV_List,',')+LENGTH(','),LENGTH(SWV_List));
    END LOOP;
    FOR RetRow IN
    (SELECT ltrim(rtrim(SWV_List)) SelectedValue FROM dual
    )
    LOOP
      v_RtnValue.SelectedValue := RetRow.SelectedValue;
      PIPE ROW(v_RtnValue);
    END LOOP;
    RETURN;
  END;

Oracle对该错误的描述如下:

错误:ORA-12714(ORA-12714)

文本:指定的国家字符集无效

原因:仅允许使用UTF8和AL16UTF16作为国家字符集

措施:确保指定的国家字符集有效

检查NLS\u NCHAR\u字符集,该字符集是使用以下方法设置的:

从NLS_数据库_参数中选择值,其中参数='NLS_NCHAR_CHARACTERSET'


请尝试使用NCHAR、NVARCHAR或NCLOB,Oracle会这样说错误:

错误:ORA-12714(ORA-12714)

文本:指定的国家字符集无效

原因:仅允许使用UTF8和AL16UTF16作为国家字符集

措施:确保指定的国家字符集有效

检查NLS\u NCHAR\u字符集,该字符集是使用以下方法设置的:

从NLS_数据库_参数中选择值,其中参数='NLS_NCHAR_CHARACTERSET'


尝试使用NCHAR、NVARCHAR2或NCLOB

这是一种将逗号分隔的字符串拆分为一系列标记的复杂方法。检查一下实现相同功能的这种更简单的方法:非常感谢,效果很好。我是Oracle的新手,我在T-Sql中创建了它,并使用了一个转换器工具将它转换为PL Sql。这是一种将逗号分隔的字符串拆分为一系列标记的复杂方法。看看这个实现同样目标的简单方法:非常感谢,效果很好。我是Oracle的新手,我在T-Sql中创建了它,并使用了一个转换工具将其转换为PL Sql