ORACLE SQL方法产生警告

时间:2014-06-17 01:35:06

标签: sql oracle function

我无法获得以下成员编译方法(count_single_buses)。非常感谢任何有关我的代码语法错误的建议。

CREATE OR REPLACE TYPE BodyModel2_Type AS OBJECT(
ModelID INTEGER,
ModelName VARCHAR2(45),
FloorType VARCHAR2(45),
Manufacturer VARCHAR2(45),
Length NUMBER(8,2),
Width NUMBER(8,2),
NoOfAxles INTEGER,
MEMBER FUNCTION count_single_buses(ModelID INTEGER) RETURN INTEGER);
/


CREATE OR REPLACE TYPE BODY BodyModel2_Type AS
MEMBER FUNCTION count_single_buses(ModelID INTEGER) RETURN INTEGER IS
N INTEGER;
BEGIN
    N := (SELECT COUNT(BODYMODELREF) FROM SINGLEDECKBUS_TABLE S 
          WHERE S.BODYMODELREF = ModelID);
    RETURN N;
END count_single_buses;
END;

- 编辑 -

感谢@Ravi,我设法解决了这个问题,我纠正了我的SQL语法并将结果集设置为NUMBER而不是INTEGER。

CREATE OR REPLACE TYPE BODY BodyModel_Type AS
MEMBER FUNCTION count_single_buses(thisModelID INTEGER) RETURN NUMBER IS
NUM NUMBER;
BEGIN
    SELECT COUNT(S.BODYMODELREF) INTO NUM FROM SINGLEDECKBUS_TABLE S WHERE S.BODYMODELREF.MODELID = thisModelID;
    RETURN NUM;
END count_single_buses;
END;
/

仍然不确定为什么@Ravi的确切代码仍会产生警告,并认为返回计数值时的结果集可能会变成整数。无论如何,代码现在可以运行了。谢谢大家。

1 个答案:

答案 0 :(得分:1)

您的BodyModel2_Type类型定义看起来没问题。但是,正文定义在语法上是不正确的。

您无法直接将SQL语句定义到变量,从而使此语句错误。

N := (SELECT COUNT(BODYMODELREF) FROM SINGLEDECKBUS_TABLE S 
          WHERE S.BODYMODELREF = ModelID);

您必须使用Select... into语句才能将SQL查询的结果集分配到变量中。所以,正确的语法看起来应该是这样的

SELECT COUNT(BODYMODELREF) FROM SINGLEDECKBUS_TABLE S  INTO N
              WHERE S.BODYMODELREF = ModelID

AFAIK你没有END Type后跟Type name这样的END count_single_buses。它是'会产生错误。所以,整体你的Type体规应如下所示:

CREATE OR REPLACE TYPE BODY BodyModel2_Type AS
MEMBER FUNCTION count_single_buses(ModelID INTEGER) RETURN NUMBER IS
N NUMBER;
BEGIN
    SELECT COUNT(BODYMODELREF) FROM SINGLEDECKBUS_TABLE S INTO N
          WHERE S.BODYMODELREF = ModelID;
    RETURN (N);
END;
END;
/

我现在没有任何可用的实时环境来写这个,所以如果你在上面的代码中遇到任何错误,请告诉我。

干杯。