首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00972:标识符太长ORA-06512

ORA-00972:标识符太长ORA-06512
EN

Stack Overflow用户
提问于 2017-01-18 20:16:15
回答 2查看 531关注 0票数 0

我有一个这样的过程,每当我执行这个过程时,它都会根据select类型在游标中给出结果:

代码语言:javascript
复制
create or replace PROCEDURE EMAT_PROC_DROPDOWN_SELECTALL(SELECT_TYPE IN VARCHAR2, RESULT_SET OUT SYS_REFCURSOR)
    AS
  SELECT_TYPE_IN VARCHAR2(100);
  TABLE_NAME VARCHAR2(100);
  FIELD_NAME VARCHAR2(100);
  C_ZONE SYS_REFCURSOR;
  C_USER_ID SYS_REFCURSOR; 
BEGIN
  SELECT_TYPE_IN:=SELECT_TYPE;
IF(SELECT_TYPE_IN ='ZONE') THEN
BEGIN
  TABLE_NAME:='MM_ZONEMASTER';
  FIELD_NAME:='ZONE_NAME';
  OPEN C_ZONE FOR
    'SELECT DISTINCT' ||FIELD_NAME|| 'FROM' ||TABLE_NAME||';';
  LOOP
        FETCH C_ZONE INTO RESULT_SET;
        EXIT WHEN C_ZONE%NOTFOUND;
  END LOOP;
  CLOSE C_ZONE;
END;
ELSIF(SELECT_TYPE_IN ='USER') THEN
BEGIN
  TABLE_NAME:='AD_USERMASTER';
  FIELD_NAME:='USER_ID';
  OPEN C_USER_ID FOR
   'SELECT DISTINCT' ||FIELD_NAME|| 'FROM' ||TABLE_NAME||';';
  LOOP
    FETCH C_USER_ID INTO RESULT_SET;
        EXIT WHEN C_USER_ID%NOTFOUND;
  END LOOP;
  CLOSE C_ZONE;
  END;
  END IF;
END;

但返回错误*ORA-00972:标识符太长ORA-06512:位于"EMAT.EMAT_PROC_DROPDOWN_SELECTALL",第14行ORA-06512:位于第7行

EN

回答 2

Stack Overflow用户

发布于 2017-01-18 20:22:09

这是问题所在:'SELECT DISTINCT' ||FIELD_NAME|| 'FROM' ||TABLE_NAME||';';

它会将其视为SELECT DISTINCTZONE_NAMEFROMMM_ZONEMASTER

另一个也是如此。

添加空格并将其编写为SELECT DISTINCT ' ||FIELD_NAME|| ' FROM ' ||TABLE_NAME||';';

票数 1
EN

Stack Overflow用户

发布于 2017-01-18 20:23:35

游标中的字段名称和表名周围缺少空格。它显示为SELECT DISTINCTZONE_NAMEFROMMM_ZONEMASTER;而不是SELECT DISTINCT ZONE_NAME FROM MM_ZONEMASTER;,将该行替换为以下内容应该会有帮助:

代码语言:javascript
复制
'SELECT DISTINCT ' ||FIELD_NAME|| ' FROM ' ||TABLE_NAME||';';

另外,在IF中使用嵌套块时要小心。如果不需要的话,我会避免滥用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41719181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档