我无法获得以下成员编译方法(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的确切代码仍会产生警告,并认为返回计数值时的结果集可能会变成整数。无论如何,代码现在可以运行了。谢谢大家。
答案 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;
/
我现在没有任何可用的实时环境来写这个,所以如果你在上面的代码中遇到任何错误,请告诉我。
干杯。