Oracle11g ORA-00972:标识符太长ORA-06512
我有一个这样的过程,每当我执行该过程时,它将根据选择类型给出游标结果:Oracle11g ORA-00972:标识符太长ORA-06512,oracle11g,Oracle11g,我有一个这样的过程,每当我执行该过程时,它将根据选择类型给出游标结果: 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_ZON
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:在第14行的“EMAT.EMAT\u PROC\u下拉列表\u SELECTALL”中
ORA-06512:在第7行这是一个问题:
从“|表|名称| |”中选择不同的“| |字段| | |”代码>
它会将其视为SELECT DISTINCTZONE\u NAMEFROMMM\u ZONEMASTER
另一个也一样
添加空格并将其写成从“|表|名称|”中选择不同的“|字段|名称| |”代码>字段名和表名周围的光标中缺少空格。它的内容是从mm\u ZONEMASTER中选择DISTINCTZONE\u name代码>而不是从MM_ZONEMASTER中选择不同的区域名称代码>
将该行替换为以下内容:
'SELECT DISTINCT ' ||FIELD_NAME|| ' FROM ' ||TABLE_NAME||';';
此外,在IF中使用嵌套块时要小心。如果不需要,我会避免滥用它。@JeromeFr您的解决方案是正确的,但当我执行BEGIN TABLE_NAME:='MM_ZONEMASTER';字段名称:=“区域名称”;打开C|u区域,从“|表| u名称|”中选择不同的“|字段|名称|”;ORA-00911:无效字符