为什么创建类型实体时会报 警告:创建的类型体带有编译错误

时间:2021-11-16 16:58:40
我的代码如下:

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下运行
出现该警告,我的 这个实体是建立了,还是没有建立呢?,有没有什么影响。

3 个解决方案

#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里面,这样就不会有什么问题了。

#3


谢谢楼上的,深表感谢。

#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里面,这样就不会有什么问题了。

#3


谢谢楼上的,深表感谢。