Oracle Forms中的用户定义类型(PL / SQL)

时间:2016-06-08 15:55:48

标签: oracle object plsql oracle11g oracleforms

我使用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数据库。

0 个答案:

没有答案