对于经常开发项目来说,我们是需要经常导库,我是对数据库进行开发,就好比本地是12G的数据库,客户服务器是 11G的数据库,这就会产生相当多的问题了。就好比我们本次要讨论的 这个 string_agg 就会出现问题。
- 最近将新开发的功能更新到正式环境上去后,突然间功能就跑不动了,本地运行也确实没有问题。
- 对于上边的问题,我们在开发的时候,是不是会经常摸不到头脑,要是没遇见过的人,肯定觉得是没问题的,或是实施在更新的时候,没正常更新。
- 那既然问题出现了,我们就不得不想一下,是什么问题,一般来说就会排序程序版本,确认没问题后。要更新的sql也是全部更新了,全部确认后,都没有问题的话。
- 接下来,我们就只能通过程序日志来定位,直到发现 string_agg 这个函数不存在,我们才知道,这里报错了。
- 此时,我们可能还不知道是因为数据库版本号的差异引起的,我们可能还会反复确认下,这个系统自带的函数,到最后,可能还是不知道问题在哪里。
- 那这里我们就总结下,就是数据库版本之间的差异,引起的问题。既然知道了,我们就可以在11G的数据库下边创建 string_agg 这个函数。
CREATE OR REPLACE TYPE t_string_agg AS OBJECT
(
g_string VARCHAR2(32767),
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg)
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg,
value IN VARCHAR2 )
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateTerminate(self IN t_string_agg,
returnValue OUT VARCHAR2,
flags IN NUMBER)
RETURN NUMBER,
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg,
ctx2 IN t_string_agg)
RETURN NUMBER
);
/
CREATE OR REPLACE TYPE BODY t_string_agg IS
STATIC FUNCTION ODCIAggregateInitialize(sctx IN OUT t_string_agg)
RETURN NUMBER IS
BEGIN
sctx := t_string_agg(NULL);
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateIterate(self IN OUT t_string_agg,
value IN VARCHAR2 )
RETURN NUMBER IS
BEGIN
SELF.g_string := self.g_string || ',' || value;
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateTerminate(self IN t_string_agg,
returnValue OUT VARCHAR2,
flags IN NUMBER)
RETURN NUMBER IS
BEGIN
returnValue := RTRIM(LTRIM(SELF.g_string, ','), ',');
RETURN ODCIConst.Success;
END;
MEMBER FUNCTION ODCIAggregateMerge(self IN OUT t_string_agg,
ctx2 IN t_string_agg)
RETURN NUMBER IS
BEGIN
SELF.g_string := SELF.g_string || ',' || ctx2.g_string;
RETURN ODCIConst.Success;
END;
END;
/
CREATE OR REPLACE FUNCTION string_agg (p_input VARCHAR2)
RETURN VARCHAR2
PARALLEL_ENABLE AGGREGATE USING t_string_agg;
以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。
要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。
- THE END -
最后修改:2024年2月27日
非特殊说明,本博所有文章均为博主原创。
共有 0 条评论