[英]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.