zoukankan      html  css  js  c++  java
  • 创建对象类型

    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
    Connected as SYS
     
    SQL> select * from store.purchases;
     
                                 PRODUCT_ID                             CUSTOMER_ID                                QUANTITY
    --------------------------------------- --------------------------------------- ---------------------------------------
                                          1                                       4                                       1
                                          2                                       4                                       1
     
    SQL> select * from purchases;
     
                                 PRODUCT_ID                             CUSTOMER_ID                                QUANTITY
    --------------------------------------- --------------------------------------- ---------------------------------------
     
    SQL> select * from products;
     
                                 PRODUCT_ID                         PRODUCT_TYPE_ID NAME                           DESCRIPTION                                          PRICE
    --------------------------------------- --------------------------------------- ------------------------------ -------------------------------------------------- -------
     
    SQL> select * from store.products;
     
                                 PRODUCT_ID                         PRODUCT_TYPE_ID NAME                           DESCRIPTION                                          PRICE
    --------------------------------------- --------------------------------------- ------------------------------ -------------------------------------------------- -------
                                          1                                       1 Modern Science                 A description of modern science                      19.95
                                          2                                       1 Chemistry                      Introduction to Chemistry                            30.00
                                          3                                       2 Supernova                      A star explodes                                      25.99
                                          4                                       2 Tank War                       Action movie about a future war                      13.95
                                          5                                       2 Z Files                        Series on mysterious activities                      49.99
                                          6                                       2 2412: The Return               Aliens return                                        14.95
                                          7                                       3 Space Force 9                  Adventures of heroes                                 13.49
                                          8                                       3 From Another Planet            Alien from another planet lands on Earth             12.99
                                          9                                       4 Classical Music                The best classical music                             10.99
                                         10                                       4 Pop 3                          The best popular music                               15.99
                                         11                                       4 Creative Yell                  Debut album                                          14.99
                                         12                                         My Front Line                  Their greatest hits                                  13.49
     
    12 rows selected
     
    SQL> create table object_products of product_typ;
     
    Table created
     
    SQL> insert into object_products values(
      2  product_typ(1,'Pasta','20 oz bag of pasta',3.95,10));
     
    1 row inserted
     
    SQL> describe product_typ;
    Element          Type        
    ---------------- ------------
    ID               NUMBER      
    NAME             VARCHAR2(15)
    DESCRIPTION      VARCHAR2(22)
    PRICE            NUMBER(5, 2)
    DAYS_VALID       NUMBER      
    GET_SELL_BY_DATE FUNCTION    
     
    SQL> insert into object_products(id,name,description,price,days_valid)
      2  values(
      3  2,'Sardines','12 oz box of sardines',2.99,5);
     
    1 row inserted
     
    SQL> select * from object_products;
     
            ID NAME            DESCRIPTION              PRICE DAYS_VALID
    ---------- --------------- ---------------------- ------- ----------
             1 Pasta           20 oz bag of pasta        3.95         10
             2 Sardines        12 oz box of sardines     2.99          5
     
    SQL> select value(op)
      2  from object_products op;
     
    VALUE(OP)
    ---------
    <Object>
    <Object>
     
    SQL> update object_products
      2  set description='25 oz bag of pasta' where id=1;
     
    1 row updated
     
    SQL> select * from object_product;
     
    select * from object_product
     
    ORA-00942: 表或视图不存在
     
    SQL> select * from object_products;
     
            ID NAME            DESCRIPTION              PRICE DAYS_VALID
    ---------- --------------- ---------------------- ------- ----------
             1 Pasta           25 oz bag of pasta        3.95         10
             2 Sardines        12 oz box of sardines     2.99          5
     
    SQL> create table object_customers of person_typ;
     
    Table created
     
    SQL> insert into boject_customers values(
      2  person_typ(1,'John','Brown',date'1955-4-01','800-555-1211',address_typ(
      3  '2 State Street','Beantown','MA','12345')));
     
    insert into boject_customers values(
    person_typ(1,'John','Brown',date'1955-4-01','800-555-1211',address_typ(
    '2 State Street','Beantown','MA','12345')))
     
    ORA-00942: 表或视图不存在
     
    SQL> insert into object_customers value(
      2  person_typ(1,'John','Brown',date'1955-4-01','800-555-1211',address_typ(
      3  '2 State Street','Beantown','MA','12345')));
     
    insert into object_customers value(
    person_typ(1,'John','Brown',date'1955-4-01','800-555-1211',address_typ(
    '2 State Street','Beantown','MA','12345')))
     
    ORA-00917: 缺失逗号
     
    SQL> insert into object_customers values(
      2  person_typ(1,'John','Brown',date'1955-4-1','800-555-1211',
      3  address_typ('2 State ','Middle Town','CA','12345'));
     
    insert into object_customers values(
    person_typ(1,'John','Brown',date'1955-4-1','800-555-1211',
    address_typ('2 State ','Middle Town','CA','12345'))
     
    ORA-00917: 缺失逗号
     
    SQL> insert into object_customers values(
      2  person_typ(1,'John','Brown',date'1955-4-1','800-555-1211',
      3  address_typ('2 State Street','Beantown','MA','12345')));
     
    1 row inserted
     
    SQL> insert into object_customers(
      2  id,first_name,last_name,dob,phone,address)
      3  values(
      4  2,'Cynthia','Green',date'1968-4-5','800-555-1212',address_typ(
      5  '3 Free Street','Middle Town','CA','12345'));
     
    1 row inserted
     
    SQL> select * from object_products;
     
            ID NAME            DESCRIPTION              PRICE DAYS_VALID
    ---------- --------------- ---------------------- ------- ----------
             1 Pasta           25 oz bag of pasta        3.95         10
             2 Sardines        12 oz box of sardines     2.99          5
     
    SQL> commit;
     
    Commit complete
     
    SQL> select * from object_customers;
     
            ID FIRST_NAME LAST_NAME  DOB         PHONE        ADDRESS
    ---------- ---------- ---------- ----------- ------------ -------
             1 John       Brown      1955-4-1    800-555-1211 <Object
             2 Cynthia    Green      1968-4-5    800-555-1212 <Object
     
    SQL> create table purchases(
      2  id number primary ke,
      3  customer ref person_typ scope is object_customers,
      4  product ref product_typ scope id object_products);
     
    create table purchases(
    id number primary ke,
    customer ref person_typ scope is object_customers,
    product ref product_typ scope id object_products)
     
    ORA-00905: 缺失关键字
     
    SQL> create table purchases(
      2  id number primary key,
      3  customer ref person_typ scope id object_customers,
      4  product ref product_typ scope id object_products
      5  );
     
    create table purchases(
    id number primary key,
    customer ref person_typ scope id object_customers,
    product ref product_typ scope id object_products
    )
     
    ORA-00905: 缺失关键字
     
    SQL> create table purchases(
      2  id number primary key,
      3  customer ref person_typ scope is object_customers,
      4  product ref product_typ scope is object_products
      5  );
     
    create table purchases(
    id number primary key,
    customer ref person_typ scope is object_customers,
    product ref product_typ scope is object_products
    )
     
    ORA-00955: 名称已由现有对象使用
     
    SQL> describe purchases;
    Name        Type    Nullable Default Comments
    ----------- ------- -------- ------- --------
    PRODUCT_ID  INTEGER                          
    CUSTOMER_ID INTEGER                          
    QUANTITY    INTEGER                          
     
    SQL> drop table purchases;
     
    Table dropped
     
    SQL> create table purchases(
      2  id number primary ke,
      3  customer ref person_typ scope is object_customers,
      4  product ref product_typ scope is object_products
      5  );
     
    create table purchases(
    id number primary ke,
    customer ref person_typ scope is object_customers,
    product ref product_typ scope is object_products
    )
     
    ORA-00905: 缺失关键字
     
    SQL> create table purchases(
      2  id number primary key,
      3  customer ref person_typ scope is object_customers,
      4  product ref product_typ scope is object_products
      5  );
     
    Table created
     
    SQL> insert into purchases(
      2  id,customer,product)
      3  values(1,(select ref(oc) from object_customers oc where oc.id=1),(
      4  select ref(op) from object_products op where op.id=1))
      5  ;
     
    1 row inserted
     
    SQL> select * from purchases;
     
            ID CUSTOMER PRODUCT
    ---------- -------- -------
             1 <Referen <Refere
     
    SQL> select deref(customer),deref(product) from purchases;
     
    DEREF(CUSTOMER) DEREF(PRODUCT)
    --------------- --------------
    <Object>        <Object>
     
    SQL> update purchases set product=(
      2  select ref(op) from object_products op where op.id=2)
      3  where  id=1;
     
    1 row updated
     
    SQL> create or replace
      2  /
     
    create or replace
     
    ORA-00922: 选项缺失或无效
     
    SQL> create or replace package product_package as
      2  type ref_cursor_typ is ref cursor;
      3  function get_prodcuts return ref_cursor_typ;
      4  procedure insert_product(
      5  p_id in object_products.id%type,
      6  p_name in object_products.name%type,
      7  p_description in object_products.description%type,
      8  p_price in object_products.price%type,
      9  p_days.valid in object_products.days_valid%type
     10  );
     11 
     12  end product_package;
     13  /
     
    Warning: Package created with compilation errors
     
    SQL> show error;
    Errors for PACKAGE SYS.PRODUCT_PACKAGE:
     
    LINE/COL ERROR
    -------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    9/7      PLS-00103: 出现符号 "."在需要下列之一时:   in out <an identifier>     <a double-quoted delimited-identifier> ... long double ref     char time timestamp interval date binary national character     nchar 
     
    SQL> create or replace package product_package as
      2  type ref_cursor_typ is ref cursor;
      3  function get_products return ref_cursor_typ;
      4  procedure insert_product(
      5  p_id in object_products.id %type,
      6  p_name in object_products.name%type,
      7  p_description in object_products.description%type,
      8  p_price in object_products.price%type,
      9  p_days_valid in object_products.days_valid%type
     10  );
     11  end product_package;
     12  /
     
    Package created
     
    SQL> create or replace package body product_package as
      2  function get_products
      3  return ref_cursor_typ is
      4  products_ref_cursor ref_cursor_typ;
      5  begin
      6  open products_ref_cursor for
      7  select value(op)
      8  from object_products op;
      9  return products_ref_cursor;
     10  end get_products;
     11  procedure insert_product(
     12  p_id in object_products.id%type,
     13  p_name in object_products.name%type,
     14  p_description in object_products.description%type,
     15  p_price in object_products.price%type,
     16  p_days_valid in object_products.days_valid%type
     17  )as
     18  product product_typ:=
     19  product_typ(
     20  p_id,p_name,p_description,p_price,P_days_valid);
     21  begin
     22   insert into object_products values(product);
     23  commit;
     24  exception when
     25  others then
     26  rollback;
     27  end insert_product;
     28  end product_package;
     29  /
     
    Package body created
     call
    SQL> call product_package.insert_product(4,'salsa','15 oz jar of salsa',1.50,20);
     
    Method called
     
    SQL> select product_package.get_products from dual;
     
    GET_PRODUCTS
    ------------
    <Value Error
     
    SQL> select product_package.get_products from dual;
     
    GET_PRODUCTS
    ------------
    <Value Error
     
    SQL> select * from  object_products;
     
            ID NAME            DESCRIPTION              PRICE DAYS_VALID
    ---------- --------------- ---------------------- ------- ----------
             1 Pasta           25 oz bag of pasta        3.95         10
             2 Sardines        12 oz box of sardines     2.99          5
             4 salsa           15 oz jar of salsa        1.50         20
     
    SQL> select product_package.get_products from dual;
     
    GET_PRODUCTS
    ------------
    <Value Error
     
    SQL> show error;
    No errors
     
    SQL> commit;
     
    Commit complete
     
    SQL> create type person_typ as object(
      2  id number,
      3  first_name varchar2(10),
      4  last_name varchar2(10),
      5  dob  date,
      6  phone varchar2(12),
      7  address address_typ) no final;
      8  /
     
    create type person_typ as object(
    id number,
    first_name varchar2(10),
    last_name varchar2(10),
    dob  date,
    phone varchar2(12),
    address address_typ) no final;
     
    ORA-00955: 名称已由现有对象使用
     
    SQL> show person_typ;
    SQL> describe person_typ;
    Element    Type        
    ---------- ------------
    ID         NUMBER      
    FIRST_NAME VARCHAR2(10)
    LAST_NAME  VARCHAR2(10)
    DOB        DATE        
    PHONE      VARCHAR2(12)
    ADDRESS    ADDRESS_TYP 
     
    SQL> alter type person_typ set not final;
     
    alter type person_typ set not final
     
    ORA-00922: 选项缺失或无效
     
    SQL> alter type person_typ not final;
     
    alter type person_typ not final
     
    ORA-22312: 必须指定 CASCADE 或 INVALIDATE 选项
     
    SQL> alter type person_typ not final cascade;
     
    Type altered
     
    SQL> create type business_person_typ under person_typ(
      2  titile varchar2(20),
      3  company varchar2(20)
      4  );
      5  /
     
    Type created
     
    SQL> create table object_business_customers of business_person_typ;
     
    Table created
     
    SQL> insert into object_business_customers values(
      2  business_person_typ(1,'John','Brown',date'1955-4-01','800-555-1211',
      3  address_typ('2 State Street','Beantown','MA','12345'),'Manager','XYZ Corp'));
     
    1 row inserted
     
    SQL> select * from object_business_customers;
     
            ID FIRST_NAME LAST_NAME  DOB         PHONE        ADDRESS TITILE               COMPANY
    ---------- ---------- ---------- ----------- ------------ ------- -------------------- --------------------
             1 John       Brown      1955-4-1    800-555-1211 <Object Manager              XYZ Corp
     
    SQL> select bbc.address_typ.street from object_business_customers bbc;
     
    select bbc.address_typ.street from object_business_customers bbc
     
    ORA-00904: "BBC"."ADDRESS_TYP"."STREET": 标识符无效
     
    SQL> select object_business_customers.address.street from object_business_customers where title='Manager';
     
    select object_business_customers.address.street from object_business_customers where title='Manager'
     
    ORA-00904: "TITLE": 标识符无效
     
    SQL> show error;
    No errors
     
    SQL> select object_business_customers.address.city from object_business_customers where object_business_customers.id=1;
     
    select object_business_customers.address.city from object_business_customers where object_business_customers.id=1
     
    ORA-00904: "OBJECT_BUSINESS_CUSTOMERS"."ADDRESS"."CITY": 标识符无效
     
    SQL> select pc.title from object_business_customers pc where pc.company='XYZ Corp';
     
    select pc.title from object_business_customers pc where pc.company='XYZ Corp'
     
    ORA-00904: "PC"."TITLE": 标识符无效
     
    SQL> create type vehicla_typ as object(
      2  id number,
      3  make varchar2(15),
      4  model varchar2(15)
      5  )not final not instantiable;
      6  /
     
    Type created
     
    SQL> create type car_typ under vehicle_typ(
      2  convertible char(1)
      3  );
      4  /
     
    Warning: Type created with compilation errors
     
    SQL> show error;
    Errors for TYPE SYS.CAR_TYP:
     
    LINE/COL ERROR
    -------- --------------------------------------------
    1/20     PLS-00201: 必须声明标识符 'VEHICLE_TYP'
    0/0      PL/SQL: Compilation unit analysis terminated
     
    SQL> create type car_typ undr vehicle_typ(
      2  convertible char(1)
      3  );
      4  /
     
    create type car_typ undr vehicle_typ(
    convertible char(1)
    );
     
    ORA-06545: PL/SQL: 编译错误 - 编译中止
    ORA-06550: 第 1 行, 第 14 列:
    PLS-00103: 出现符号 "UNDR"在需要下列之一时:
     ; is authid as compress
       force compiled wrapped under
    符号 "under在 "UNDR" 继续之前已插入。
    ORA-06550: 第 0 行, 第 0 列:
    PLS-00565: 作为潜在的 REF 目标 (对象类型), CAR_TYP 必须是完整的
     
    SQL> create type car_typ under vehicle_typ(
      2  convertible char(1)
      3  );
      4  /
     
    Warning: Type created with compilation errors
     
    SQL> show error
    Errors for TYPE SYS.CAR_TYP:
     
    LINE/COL ERROR
    -------- --------------------------------------------
    1/20     PLS-00201: 必须声明标识符 'VEHICLE_TYP'
    0/0      PL/SQL: Compilation unit analysis terminated
     
    SQL> create type car_typ under vehicle_typ(
      2  vonvertible char(1)
      3  );
      4  /
     
    Warning: Type created with compilation errors
     
    SQL> show error
    Errors for TYPE SYS.CAR_TYP:
     
    LINE/COL ERROR
    -------- --------------------------------------------
    1/20     PLS-00201: 必须声明标识符 'VEHICLE_TYP'
    0/0      PL/SQL: Compilation unit analysis terminated
     
    SQL> create type vehicle_typ as object(
      2  id number,
      3  make varchar2(15),
      4  model varchar2(15)
      5  )not final not instantiable;
      6  /
     
    Type created
     
    SQL> create type csr_typ under vehicle_typ(
      2  convertible char(1)
      3  );
      4  /
     
    Type created
     
    SQL> creat type motorcyle_typ under vehicle_typ(
      2  sidecar char(1)
      3  );
     
    creat type motorcyle_typ under vehicle_typ(
    sidecar char(1)
    )
     
    ORA-00900: 无效 SQL 语句
     
    SQL> /
     
    creat type motorcyle_typ under vehicle_typ(
    sidecar char(1)
    )
     
    ORA-00900: 无效 SQL 语句
     
    SQL> create type motorcyle_typ under vehicle_typ(
      2  sidecar char(1)
      3  );
      4  /
     
    Type created
     
    SQL> create table vehicles of vehicle_typ;
     
    Table created
     
    SQL> create table cars of car_typ;
     
    create table cars of car_typ
     
    ORA-04045: 在重新编译/重新验证 SYS.CAR_TYP 时出错
    ORA-22345: 在尝试此操作之前应重新编译类型 SYS.CAR_TYP
     
    SQL> create table cars of car_typ;
     
    create table cars of car_typ
     
    ORA-04045: 在重新编译/重新验证 SYS.CAR_TYP 时出错
    ORA-22345: 在尝试此操作之前应重新编译类型 SYS.CAR_TYP
     
    SQL> create type car_typ under vehicla_typ(
      2  convertible char(1)
      3  );
      4  /
     
    Type created
     
    SQL> commit;
     
    Commit complete
     
    SQL> create table cars of car_typ;
     
    Table created
     
    SQL> create motorcycles of motorcycle_typ;
     
    create motorcycles of motorcycle_typ
     
    ORA-00901: 无效 CREATE 命令
     
    SQL> show error;
    No errors
     
    SQL> create motorcycles of motorcycle_typ;
     
    create motorcycles of motorcycle_typ
     
    ORA-00901: 无效 CREATE 命令
     
    SQL> create type motorcycles of motorcyle_typ;
      2  /
     
    Warning: Type created with compilation errors
     
    SQL> show error
    Errors for TYPE SYS.MOTORCYCLES:
     
    LINE/COL ERROR
    -------- -------------------------------------------------------------------------------------------------------
    1/18     PLS-00103: 出现符号 "OF"在需要下列之一时:   ; is authid as compress     force compiled wrapped under 
     
    SQL> create type motorcycle_typ under vehicle_typ(
      2  sidecar char(1));
      3  /
     
    Type created
     
    SQL> commit;
     
    Commit complete
     
    SQL> create table motorcycles of motorcycle_typ;
     
    create table motorcycles of motorcycle_typ
     
    ORA-00955: 名称已由现有对象使用
     
    SQL> drop table motorcycles;
     
    drop table motorcycles
     
    ORA-00942: 表或视图不存在
     
    SQL> create table motorcycles of motorcycle_typ;
     
    create table motorcycles of motorcycle_typ
     
    ORA-00955: 名称已由现有对象使用
     
    SQL> show error;
    No errors
     
    SQL> drop object motorcycles;
     
    drop object motorcycles
     
    ORA-00950: 无效 DROP 选项
     
    SQL> create table motorcycle of motorcycle_typ;
     
    Table created
     
    SQL> insert into cars values(
      2  car_typ(1,'Toyota','MR2','Y')
      3  );
     
    1 row inserted
     
    SQL> insert into motorcycles values(
      2  motorcycle_typ(1,'Harley_Davidson','V-Rod','N'));
     
    insert into motorcycles values(
    motorcycle_typ(1,'Harley_Davidson','V-Rod','N'))
     
    ORA-04044: 此处不允许过程, 函数, 程序包或类型
     
    SQL> insert into motorcycle values(
      2  motorcycle_typ(1,'Harley_Davidson','V-Rod','N');
     
    insert into motorcycle values(
    motorcycle_typ(1,'Harley_Davidson','V-Rod','N')
     
    ORA-00917: 缺失逗号
     
    SQL> insert into motorcycle values(
      2  motorcyle_tye(1,'Harley-Davidson','V-Rod','N'));
     
    insert into motorcycle values(
    motorcyle_tye(1,'Harley-Davidson','V-Rod','N'))
     
    ORA-00904: "MOTORCYLE_TYE": 标识符无效
     
    SQL> insert into motorcle value(
      2  motorcycle_typ(1,'Harley-Davidson','V-ROd','N'));
     
    insert into motorcle value(
    motorcycle_typ(1,'Harley-Davidson','V-ROd','N'))
     
    ORA-00917: 缺失逗号
     
    SQL> insert into motorcle values(
      2  motorcycle_typ(1,'harley-Davidson','V-Rod','N'));
     
    insert into motorcle values(
    motorcycle_typ(1,'harley-Davidson','V-Rod','N'))
     
    ORA-00942: 表或视图不存在
     
    SQL> insert into motorcycle values(
      2  motorcycle_typ(1,'harley_Davison','V-Rod','N'));
     
    1 row inserted
     
    SQL> select* from cars;
     
            ID MAKE            MODEL           CONVERTIBLE
    ---------- --------------- --------------- -----------
             1 Toyota          MR2             Y
     
    SQL> select * from motorcycles;
     
    select * from motorcycles
     
    ORA-04044: 此处不允许过程, 函数, 程序包或类型
     
    SQL> select * from motorcycle;
     
            ID MAKE            MODEL           SIDECAR
    ---------- --------------- --------------- -------
             1 harley_Davison  V-Rod           N
     
    SQL> commit;
     
    Commit complete
     
    SQL>

  • 相关阅读:
    hibernate 笔记二
    log4j详解及简易搭建
    hibernate 笔记一
    【工作心得】timesten应用(安装配置篇)
    【转】boost 内存池
    【转】基于Socket的UDP和TCP编程介绍
    【工作心得】timesten应用(开发篇)
    【读书笔记】UNIX进程间通信
    【读书笔记】硬链接与软链接
    【转】Linux Socket编程
  • 原文地址:https://www.cnblogs.com/canyangfeixue/p/2468307.html
Copyright © 2011-2022 走看看