oracle – 如何在返回SELF的plsql对象类型的函数中链接调用

oracle – 如何在返回SELF的plsql对象类型的函数中链接调用,第1张

概述我想让一个oracle对象返回自己并能够链接这些调用.我怎么做? 我尝试返回相同的类型,但它不起作用,我也尝试添加一个由函数调用的过程,但它也不起作用.总是抱怨修改宽度成员的值.看起来功能不会承认副作用吗?它们是按照更多的数学函数原理建模的吗?这可以实现吗?我想我可以编写这个函数,所以它用SELF构建一个新的矩形,但这是非常有用的. 我的目标是能够链接像jQuery或一些java类(单身?)的调用 我想让一个oracle对象返回自己并能够链接这些调用.我怎么做?

我尝试返回相同的类型,但它不起作用,我也尝试添加一个由函数调用的过程,但它也不起作用.总是抱怨修改宽度成员的值.看起来功能不会承认副作用吗?它们是按照更多的数学函数原理建模的吗?这可以实现吗?我想我可以编写这个函数,所以它用SELF构建一个新的矩形,但这是非常有用的.

我的目标是能够链接像jquery或一些java类(单身?)的调用.就像是:

r:= r.setWIDth(0).setWIDth(1).setWIDth(2);

当然,它会有更多的方法,它不会是一个矩形.这是错误:

Error: PLS-00363: Expression 'SELF' cannot be used as an assignment targetline: 18Text: stWIDth(w);

CREATE OR REPLACE TYPE rectangle AS OBJECT(-- The type has 3 attributes.  length NUMBER,wIDth NUMBER,area NUMBER,-- define a constructor that has only 2 parameters.  CONSTRUCTOR FUNCTION rectangle(length NUMBER,wIDth NUMBER)    RETURN SELF AS RESulT,MEMBER FUNCTION setWIDth(w NUMBER) RETURN rectangle,MEMBER PROCEDURE stWIDth(w NUMBER))

CREATE OR REPLACE TYPE BODY rectangle AS  CONSTRUCTOR FUNCTION rectangle(length NUMBER,wIDth NUMBER)    RETURN SELF AS RESulT  AS  BEGIN    SELF.length := length;    SELF.wIDth := wIDth;-- We compute the area rather than accepting it as a parameter.    SELF.area := length * wIDth;    RETURN;  END;  MEMBER PROCEDURE stWIDth(w NUMBER) IS  BEGIN    self.wIDth := w;  END;  MEMBER FUNCTION setWIDth(w NUMBER) RETURN rectangle IS    BEGIN        stWIDth(w);        RETURN SELF;  END;END;

提前致谢.

解决方法 您不能同时更改对象并分配给它.您已经知道解决方案,“使用SELF构建一个新矩形”.但这不会是很多工作.

替换这个:

MEMBER FUNCTION setWIDth(w NUMBER) RETURN rectangle IS    BEGIN        stWIDth(w);        RETURN SELF;  END;

有了这个:

MEMBER FUNCTION setWIDth(w NUMBER) RETURN rectangle IS      v_rectangle rectangle := self;    BEGIN        v_rectangle.wIDth := w;        RETURN v_rectangle;  END;

您实际上是在收到编译错误.默认情况下,SELF是IN参数.对stWIDth的调用失败,因为它正在使用self.wIDth:= w;修改IN参数.

见:http://docs.oracle.com/cd/B28359_01/appdev.111/b28371/adobjbas.htm#CHDCFEEE

SELF is always the first parameter passed to the method.

In member functions,if SELF is not declared,its parameter mode
defaults to IN.

In member procedures,its parameter mode defaults to IN OUT. The default behavior does not include the NOcopY compiler hint.

总结

以上是内存溢出为你收集整理的oracle – 如何在返回SELF的pl / sql对象类型的函数中链接调用全部内容,希望文章能够帮你解决oracle – 如何在返回SELF的pl / sql对象类型的函数中链接调用所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/1164537.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-01
下一篇2022-06-01

发表评论

登录后才能评论

评论列表(0条)

    保存