【问题标题】:PL/SQL inheritance implementation where procedure is implemented under the sub objectPL/SQL 继承实现,其中过程在子对象下实现
【发布时间】:2020-05-08 08:54:09
【问题描述】:

实体关系图

问题是

根据车辆对象模型中描述的继承层次结构,找到以下问题的解决方案
1. 确定合适的对象类型并实现车辆继承类型层次结构
2. get_vehicle 成员函数返回相应车辆类型的完整信息
3. set_gear_count 成员程序接受两个参数gear_count 和车辆id 并更新自行车gear_count。
4. 创建匿名PLSQL 块并实例化卡车和自行车实例并将它们插入适当的表中。然后演示get_vechile和set_gear_count成员方法的使用。

针对这个问题,我编写了以下 PL/SQL,但出现以下错误

SQL> @inheritance;

Warning: Type Body created with compilation errors. 

当我尝试运行CREATE TYPE BODY bicycle AS主体时发生错误,错误的具体区域是set_gear_count过程。

SQL> show error
Errors for TYPE BODY BICYCLE:

LINE/COL ERROR
-------- -----------------------------------------------------------------
10/1     PL/SQL: SQL Statement ignored
10/13    PL/SQL: ORA-00947: not enough values
SQL>

我写的代码如下

--creating the base vehicle object type
CREATE OR REPLACE TYPE vehicle_t AS OBJECT
(
vehicle_id NUMBER,
manufacturer VARCHAR2(30),
purchase_date DATE,
color VARCHAR2 (10),
MEMBER FUNCTION get_vehicle RETURN VARCHAR2
)NOT FINAL;
/

CREATE TYPE BODY vehicle_t AS
MEMBER FUNCTION get_vehicle RETURN VARCHAR2
IS 
BEGIN
RETURN 'Vehicle ID:'|| TO_CHAR (vehicle_id) || 'Manufacturer:'|| manufacturer || 'Purchase Date:'||purchase_date||'Color:'||color;
END get_vehicle;
END;
/

-- CREATING SUB TYPE OF VEHICLE_T POWERED_VEHICLE  
CREATE OR REPLACE TYPE powred_vehicle UNDER vehicle_t
(
fule_type VARCHAR2(30),
license_number VARCHAR2 (10),
model VARCHAR2 (10),
OVERRIDING MEMBER FUNCTION get_vehicle RETURN VARCHAR2
)FINAL;
/

CREATE TYPE BODY powred_vehicle AS
OVERRIDING MEMBER FUNCTION get_vehicle RETURN VARCHAR2
IS 
BEGIN
RETURN (self AS vehicle_t).get_vehicle || 'Fuel Type:'|| fule_type || 'License Number:'||license_number||'Model:'||model;
END get_vehicle;
END;
/

CREATE OR REPLACE TYPE bicycle UNDER vehicle_t
(
gear_count number,
OVERRIDING MEMBER FUNCTION get_vehicle RETURN VARCHAR2,
MEMBER PROCEDURE set_gear_count (p_gear_count IN bicycle, p_vehicleid IN vehicle_t)
)FINAL;
/


CREATE TABLE vehicle_tab OF bicycle;

这是发生错误的地方。

CREATE TYPE BODY bicycle AS
OVERRIDING MEMBER FUNCTION get_vehicle RETURN VARCHAR2
IS 
BEGIN
RETURN (self AS vehicle_t).get_vehicle || 'Gear Count:'|| TO_CHAR(gear_count);
END get_vehicle;
MEMBER PROCEDURE set_gear_count (p_gear_count IN bicycle, p_vehicleid IN vehicle_t)
IS
BEGIN
INSERT INTO vehicle_tab VALUES (p_gear_count, p_vehicleid);
END set_gear_count;
END;
/

【问题讨论】:

    标签: oracle plsql user-defined-types


    【解决方案1】:

    我觉得vehicle_tab 是一张自行车桌。我想你想这样做?

    INSERT INTO vehicle_tab VALUES (SELF);
    

    另外,我认为 p_gear_count 是自行车类型令人困惑:它不应该是某种数字吗?

    【讨论】:

      猜你喜欢
      • 2015-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-23
      • 1970-01-01
      相关资源
      最近更新 更多