我使用PL / SQL,我最近发现你可以用它做OOP。 问题是我在数据库级别创建了一个对象类型,如下所示:
CREATE OR REPLACE TYPE customer AS OBJECT
(
customer_id NUMBER(10)
,customer_name VARCHAR2(30)
,customer_last VARCHAR2(30)
,constructor function customer(p_id NUMBER)
RETURN SELF AS RESULT
,member procedure display
)
该类型的身体:
CREATE OR REPLACE TYPE BODY customer AS
constructor function customer(p_id NUMBER)
RETURN SELF AS RESULT
AS
BEGIN
SELECT client_id,
client_name,
client_last
INTO self.customer_id,
self.customer_name,
self.customer_last
FROM clients
WHERE client_id = p_id;
RETURN;
END;
member procedure display IS
BEGIN
dbms_output.put_line('Name: ' || customer_name||' '|| customer_last);
END;
END;
这编译很好,没有问题。 问题是当我尝试在Oracle Forms上使用这种新类型时。
我有一个非常简单的表单,只有一个用于放置client_id的文本框,以及一个用于搜索客户的按钮(它使用客户类型中的构造函数来创建新实例并将其返回),以及另一个文本框它显示客户名称。按下它时会执行一个程序单元,如下所示:
PROCEDURE search_client IS
client customer;
BEGIN
IF :CLIENT.ID_CLIENT IS NOT NULL THEN
client := customer(p_id => :CLIENT.ID_CLIENT);
:CLIENT.NAME := client.customer_name;
END IF;
END;
当我尝试编译它时,我收到了这个错误:
第3行第11列的错误0 项目被忽略
还有一些类似的错误。
我已经读过客户端PLSQL不支持这种定义类型的地方。真的吗?或者我在这里没有看到任何其他错误。
顺便说一句,我使用的是Oracle Forms 11g和Oracle 10g数据库。