Oracle PLS-00905:对象无效

jimmy19920728 2015-12-07 10:31:16
我添加下面的function,报错Oracle PLS-00905:对象BHRESVFEE.STR_ARRAY无效,请问如何解决?

Error: PLS-00905: 对象 BHRESVFEE.STR_ARRAY 无效
Line: 2
Text: RETURN str_array

Error: PL/SQL: Compilation unit analysis terminated
Line: 0
Text: CREATE OR REPLACE FUNCTION "FN_SPLIT" (p_str IN long, p_delimiter IN VARCHAR2)

CREATE OR REPLACE FUNCTION "FN_SPLIT" (p_str IN long, p_delimiter IN VARCHAR2)
RETURN str_array
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str long(8000);
str_split str_array := str_array ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter);

WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i);

IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
str_split.EXTEND;
str_split (str_split.COUNT) := str;

IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split (str_split.COUNT) := str;
END IF;
END LOOP;

RETURN str_split;
END fn_split;
...全文
3888 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
无招IT 2015-12-29
  • 打赏
  • 举报
回复
我也遇到同样报错,搞不定啊,恼火的很啊
jimmy19920728 2015-12-07
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
STR_ARRAY ,这个对象应该一个 TYPE ,你手动的创建一个,应该就可以了。
我手动创建了一个 type STR_ARRAY IS TABLE OF NUMBER INDEX BY BINARY_INTEGER; timerange STR_ARRAY; 用这个语句可以吗,因为以前没接触过Oracle,比较小白。
卖水果的net 2015-12-07
  • 打赏
  • 举报
回复
STR_ARRAY ,这个对象应该一个 TYPE ,你手动的创建一个,应该就可以了。
jimmy19920728 2015-12-07
  • 打赏
  • 举报
回复
已经查到了 CREATE OR REPLACE TYPE str_array IS TABLE OF VARCHAR2(4000); 用这句创建就好了
Oracle 10g使PL/SQL又进了一步。本章将主要介绍10g中有用的新提示(到10gR2为止)以及在以前版本中继续有用的提示。一旦可以使用所有强有力的查询来监控您的系统,那么就有必要使它们自动化运行。PL/SQL除了可完成以上的工作外,同时还将提供强大而有效的数据包和可用于性能调整的过程。PL/SQL引擎处理所有的PL/SQL请求,并且将代码传递给Oracle去执行。当PL/SQL被传递给Oracle之后,通常是放置在Oracle的系统全局区(SGA)中,特殊情况下会放置在共享池内。在Oracle中,PL/SQL的源代码可以以过程、函数、数据包,或者触发器的形式被存储在数据库中。一旦这些对象以编译过的格式存储在数据库中,那么用户只要获得相应对象的执行特权就都可以使用任何的Oracle工具来执行这些对象。一旦开始执行对象,p-代码(可执行代码)将被加载到SGA共享池中,再由 Oracle执行。一个PL/SQL对象将会一直保存在SGA共享池里,直到根据最近最少使用(Least Recently Used,简写为LRU)算法将该对象设置为失效。因此,如果有任何程序需要调用对象,只要该对象还没有失效,它就不必被重新加载到SGA共享池中。所以,Oracle通常是查询SGA共享池(效率很高)中的对象,而不是到磁盘(效率较低)上加载对象。如何使用PL/SQL更好地调整SQL很有可能就是影响性能的最大驱动因素,当然,本章节中也将介绍其他的调整方案。本章的第一部分着重介绍对PL/SQL的理解和定位。

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧