简体   繁体   English

Oracle 数据库 - REF 不受支持的数据类型

[英]Oracle Database - REF unsupported data type

So I have three tables, Staff, Book, and Sale.所以我有三张桌子,Staff、Book 和 Sale。

For Staff:对于员工:

 CREATE TYPE StaffType AS OBJECT (
     ID VARCHAR2(5),
     Name VARCHAR2(30)
     );
/
    CREATE TABLE Staff of StaffType;

For Book:对于书:

CREATE TYPE BookType AS OBJECT (
 B_ID VARCHAR2(8));
/
 CREATE TABLE Book of TicketType;

For Sale:出售:

CREATE TYPE SaleType AS OBJECT (
 S_ID VARCHAR2(8),
 S_Date VARCHAR2(10),
 Price NUMBER(10),
 With REF StaffType,
 For REF BookType );
/
CREATE TABLE Sale of SaleType (
 Scope for (With) is Staff,
 Scope for (For) is Book);

So I inserted a row in Sale table like this所以我像这样在 Sale 表中插入了一行

insert into Sale VALUES(SaleType('S12','33th',22,(SELECT REF(c) FROM Staff c WHERE c.ID='C13'),(SELECT REF(t) FROM Book t WHERE t.B_ID='T18'));

however, I get the following error:但是,我收到以下错误:

ORA-00917: missing comma 

I don't understand why I am getting this error.. What comma did I miss?我不明白为什么我会收到这个错误。我错过了什么逗号? EDIT: I followed the solution of @thatjeffsmith and although the insert statement works, when I try to view my table, I get the following error:编辑:我遵循@thatjeffsmith 的解决方案,虽然插入语句有效,但当我尝试查看我的表时,出现以下错误:

ORA-00932: inconsistent datatypes: expected CHAR got REF SQL_VTJOLYEBVKAOJEHORTCXVPTBP.STAFFTYPE

here is the code.. I removed HR.这是代码..我删除了HR。 before Book and Staff from sale table declaration because that was causing the worksheet to show an error stating that Staff and Book are out of scope.在销售表声明中的 Book 和 Staff 之前,因为这导致工作表显示错误,指出 Staff 和 Book 超出 scope。 Here is the code:这是代码:

CREATE TYPE STAFFTYPE AS OBJECT (
       ID    VARCHAR2(5),
       NAME  VARCHAR2(30)
);
/
CREATE TABLE STAFF OF STAFFTYPE;
/
INSERT INTO STAFF VALUES('C13','James');
/
CREATE TYPE BOOKTYPE AS OBJECT (
       B_ID VARCHAR2(8)
);
/
CREATE TABLE BOOK OF BOOKTYPE;
/
INSERT INTO BOOK VALUES('T18');
/
CREATE TYPE SALETYPE AS OBJECT (
       S_ID    VARCHAR2(8),
       S_DATE  VARCHAR2(10),
       PRICE   NUMBER(10),
       WITHS   REF STAFFTYPE,
       FORS    REF BOOKTYPE
);
/
CREATE TABLE SALE OF SALETYPE (
       SCOPE FOR ( WITHS ) IS STAFF,
       SCOPE FOR ( FORS ) IS BOOK
);
INSERT INTO SALE VALUES ( SALETYPE(
       'S12', '33th',
       22,
       (
              SELECT REF(C)
                FROM STAFF C
               WHERE C.ID = 'C13'
       ),
       (
              SELECT REF(T)
                FROM BOOK T
               WHERE T.B_ID = 'T18'
       )
) );

SELECT * FROM SALE;

WITH and FOR are keywords, not available as a table or column name. WITH 和 FOR 是关键字,不能用作表名或列名。 You could "QUOTE" these, but DO NOT DO THAT - it will make your life much harder going forward.你可以“引用”这些,但不要那样做——这会让你的生活更加艰难。

Your BOOK table is wrong, you're using a TYPE that doesn't exist per your example.您的 BOOK 表是错误的,您使用的 TYPE 在您的示例中不存在。

And your INSERT is missing the last ')'而且您的 INSERT 缺少最后一个 ')'

CREATE TYPE STAFFTYPE AS OBJECT (
       ID    VARCHAR2(5),
       NAME  VARCHAR2(30)
);
/
CREATE TABLE STAFF OF STAFFTYPE;
CREATE TYPE BOOKTYPE AS OBJECT (
       B_ID VARCHAR2(8)
);
/
CREATE TABLE BOOK OF BOOKTYPE;
CREATE TYPE SALETYPE AS OBJECT (
       S_ID    VARCHAR2(8),
       S_DATE  VARCHAR2(10),
       PRICE   NUMBER(10),
       WITHS   REF STAFFTYPE,
       FORS    REF BOOKTYPE
);
/
CREATE TABLE SALE OF SALETYPE (
       SCOPE FOR ( WITHS ) IS HR.STAFF,
       SCOPE FOR ( FORS ) IS HR.BOOK
);

INSERT INTO SALE VALUES ( SALETYPE(
       'S12', '33th',
       22,
       (
              SELECT REF(C)
                FROM STAFF C
               WHERE C.ID = 'C13'
       ),
       (
              SELECT REF(T)
                FROM BOOK T
               WHERE T.B_ID = 'T18'
       )
) );

在此处输入图像描述

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM