我的代码如下:CREATE OR REPLACE TYPE product_type AS OBJECT(
product_name varchar2(20),
product_description varchar2(4000) ,
product_price number,
product_price_date date,
member procedure AddProuduct (p_product_name varchar2,
p_product_description varchar2, p_product_price number,p_product_price_date date),
member function DaysSincePriceChange 
Return number
); create table product_table of product_type;create or replace type body product_type as 
member procedure AddProuduct (p_product_name varchar2,
p_product_description varchar2, p_product_price number,p_product_price_date date) as 
begin
   insert into product_table values (p_product_name,p_product_description,p_product_price,
           p_product_price_date);
   end AddProduct;
end;
在oracle 8.1.5 ,win2000server ,sqlplus下运行
出现该警告,我的 这个实体是建立了,还是没有建立呢?,有没有什么影响。

解决方案 »

  1.   

    在sqlplus下:
    1.show error; 
    2.SELECT OBJECT_NAME,OBJECT_TYPE FROM USER_OBJECTS WHERE OBJECT_TYPE='TYPE';
      

  2.   

    1.按照你提供的脚本,执行的确会有问题:
    警告:已创建的类型出现编译错误。SQL> show erro
    TYPE PRODUCT_TYPE出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    12/1     PLS-00103: 出现符号 "CREATE"
    2.可以分步骤运行,先执行
    CREATE OR REPLACE TYPE product_type AS OBJECT(
    product_name varchar2(20),
    product_description varchar2(4000),
    product_price number,
    product_price_date date,
    member procedure AddProuduct (p_product_name varchar2,
    p_product_description varchar2, p_product_price number,p_product_price_date date),
    member function DaysSincePriceChange Return number
    );
    SQL> /
    类型已创建。
    3.执行第二段脚本时出错:
    SQL> create or replace type body product_type as
      2  member procedure AddProuduct (p_product_name varchar2,
      3  p_product_description varchar2, p_product_price number,p_product_price_date date) as
      4  begin
      5     insert into product_table values (p_product_name,p_product_description,p_product_price,
      6             p_product_price_date);
      7     end AddProduct;
      8  end;
      9  /警告:已创建的类型主体出现编译错误。SQL> show error
    TYPE BODY PRODUCT_TYPE出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    7/8      PLS-00113: END 标识符 'ADDPRODUCT' 必须同 'ADDPROUDUCT' 匹配
             (在第 2 行,第 18 列)
    可以发现 end AddProduct; 这句拼写错了。
    4.修改后继续执行:
      1  create or replace type body product_type as
      2  member procedure AddProuduct (p_product_name varchar2,
      3  p_product_description varchar2, p_product_price number,p_product_price_date date) as
      4  begin
      5     insert into product_table values (p_product_name,p_product_description,p_product_price,
      6             p_product_price_date);
      7  end AddProuduct;
      8* end;
    SQL> /警告:已创建的类型主体出现编译错误。SQL> show error
    TYPE BODY PRODUCT_TYPE出现错误:LINE/COL ERROR
    -------- -----------------------------------------------------------------
    8/17     PLS-00538: 子程序或游标 'DAYSSINCEPRICECHANGE'
             必须按照对象类型说明进行说明,并且必须在对象类型主体中进行定义
    现在你应该知道为什么了吧?
    我个人建议你把insert操作和对象放到一个package里面,这样就不会有什么问题了。