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

发布于 2024-09-11 07:07:46 字数 1345 浏览 5 评论 0原文

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

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

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

因为我不可能让在实时生产环境中工作的用户停止服务器应用更新补丁,我想知道是否有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;

I got a problem with oracle database ,i created a stored procedure and i wanted to pass an array of items' ids to this procedure to select the data according to array of items using "in" clause,the available solution to this as i found was to create a function and pass a string value with all item's ids seperated by a comma ,and this function will return a datatble with a row for each item id.this approach works fine when i try it in toad in a select statement,,but when i use it in the stored procedure i get a strange error

"ORA-12714: invalid national character set specified"

after searching about the reason of that error i found that it is a bug in that version of oracle according to this page and it was fixed in a 10.2.0.4 oracle patch and the exact reason is to declare a cursor for the function that returns a data table

As it is impossible to me to let the users who work on a live production environment to stop the servers to apply the update patch ,I was wondering if any Oracle expert can help me to declare a cursor and return that cursor instead of returning the table.

my Oracle function,Thanks in Advance

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;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花之痕靓丽 2024-09-18 07:07:46

Oracle 关于该错误是这样说的:

错误:ORA-12714 (ORA-12714)

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

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

操作:确保指定的国家字符集是有效

检查使用以下方式设置的 NLS_NCHAR_CHARACTERSET:

从 NLS_DATABASE_PARAMETERS 中选择值,其中参数 = 'NLS_NCHAR_CHARACTERSET';

尝试使用 NCHAR、NVARCHAR2 或 NCLOB

Oracle says this about the error:

Error: ORA-12714 (ORA-12714)

Text: invalid national character set specified

Cause: Only UTF8 and AL16UTF16 are allowed to be used as the national character set

Action: Ensure that the specified national character set is valid

Check your NLS_NCHAR_CHARACTERSET which is set using:

select value from NLS_DATABASE_PARAMETERS where parameter = 'NLS_NCHAR_CHARACTERSET';

Try using NCHAR, NVARCHAR2 or NCLOB

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文