在SQL中使用BLOB数据类型

时间:2015-08-13 16:05:37

标签: sql oracle

我试图创建下表。但显示的错误信息是"无法识别的令牌:" 16M"

CREATE TABLE TOY_DTLS
(
    TOY_ID NUMBER(4) PRIMARY KEY,
    TOY_NAME VARCHAR2(30) NOT NULL UNIQUE,
    TOY_PRICE NUMBER(7,2) CHECK(TOY_PRICE>10),
    DISCOUNT_PRICE NUMBER(5,2) CHECK(DISCOUNT_PRICE<90),
    AGEGROUP NUMBER(3) DEFAULT 5,
    TOY_RATING NUMBER(1) CHECK(TOY_RATING>=1 AND TOY_RATING<=5),
    CATEGORY CHAR(1) CHECK(CATEGORY='I' OR CATEGORY='O' OR CATEGORY='B'),
    TOY_PIC BLOB(16M)
);

1 个答案:

答案 0 :(得分:2)

在11gr2和12c中运行此代码时,错误为ORA-00907;没有提到未被识别的令牌。

SQL> CREATE TABLE TOY_DTLS
  2  (
  3      TOY_ID NUMBER(4) PRIMARY KEY,
  4      TOY_NAME VARCHAR2(30) NOT NULL UNIQUE,
  5      TOY_PRICE NUMBER(7,2) CHECK(TOY_PRICE>10),
  6      DISCOUNT_PRICE NUMBER(5,2) CHECK(DISCOUNT_PRICE<90),
  7      AGEGROUP NUMBER(3) DEFAULT 5,
  8      TOY_RATING NUMBER(1) CHECK(TOY_RATING>=1 AND TOY_RATING<=5),
  9      CATEGORY CHAR(1) CHECK(CATEGORY='I' OR CATEGORY='O' OR CATEGORY='B'),
 10      TOY_PIC BLOB(16M)
 11  );
    TOY_PIC BLOB(16M)
                *
ERROR at line 10:
ORA-00907: missing right parenthesis

出现此错误的原因是16M是不必要的。查看the data type documentation大对象数据类型的语法是完整的:

BLOB syntax

换句话说,您无法指定LOB的最大大小。

如果删除BLOB的大小,则表格会创建:

SQL> CREATE TABLE TOY_DTLS
  2  (
  3      TOY_ID NUMBER(4) PRIMARY KEY,
  4      TOY_NAME VARCHAR2(30) NOT NULL UNIQUE,
  5      TOY_PRICE NUMBER(7,2) CHECK(TOY_PRICE>10),
  6      DISCOUNT_PRICE NUMBER(5,2) CHECK(DISCOUNT_PRICE<90),
  7      AGEGROUP NUMBER(3) DEFAULT 5,
  8      TOY_RATING NUMBER(1) CHECK(TOY_RATING>=1 AND TOY_RATING<=5),
  9      CATEGORY CHAR(1) CHECK(CATEGORY='I' OR CATEGORY='O' OR CATEGORY='B'),
 10      TOY_PIC BLOB
 11  );

Table created.

围绕图像是否应存储在数据库中存在a lot of discussion。在继续沿着这条道路走下去之前,有必要阅读一些信息/意见。