Function PLS-00201:标识符';T#u CHAR';必须申报

Function PLS-00201:标识符';T#u CHAR';必须申报,function,oracle11g,Function,Oracle11g,这个问题快把我逼疯了。此函数在一个架构中成功编译,但当我尝试在另一个架构中重新创建它时,出现错误: PLS-00201: identifier 'T_CHAR' must be declared 以下是我的功能: CREATE OR REPLACE FUNCTION TMP_SPLIT(p_val VARCHAR2) RETURN t_char IS v_res t_char; BEGIN v_res := t_char(SUBSTR(p_val,1,1)); v_res.extend(LEN

这个问题快把我逼疯了。此函数在一个架构中成功编译,但当我尝试在另一个架构中重新创建它时,出现错误:

PLS-00201: identifier 'T_CHAR' must be declared
以下是我的功能:

CREATE OR REPLACE FUNCTION TMP_SPLIT(p_val VARCHAR2)
RETURN t_char IS
v_res t_char;
BEGIN
v_res := t_char(SUBSTR(p_val,1,1));
v_res.extend(LENGTH(p_val)-1);
FOR i IN 2..LENGTH(p_val) LOOP
    v_res(i) := SUBSTR(p_val,i,1);
END LOOP;
RETURN v_res;
END;
/

这里发生了什么事?

您似乎没有在第二个模式中创建
t\u char
类型。它不是内置类型,而是用户定义的类型,由您或有权访问第一个架构的其他人创建

如果不确定类型是如何定义的,可以从schema one运行此命令:

select dbms_metadata.get_ddl('TYPE', 'T_CHAR') from dual;

DBMS_METADATA.GET_DDL('TYPE','T_CHAR')                                         
--------------------------------------------------------------------------------

  CREATE OR REPLACE TYPE "SCHEMA_1"."T_CHAR" as table of varchar2(10);
。。。然后在模式2中运行该命令,更改(或删除)模式名称:


显然,类型的实际定义会有所不同,这只是一个快速演示。从函数所做的事情来看,它可能是一个
字符表(1)

非常感谢。我不知道
CREATE OR REPLACE TYPE "SCHEMA_2"."T_CHAR" as table of varchar2(10);
/