创建表时可以设置BLOB大小吗?

时间:2019-05-06 19:25:17

标签: oracle oracle18c

我是Oracle sql的新手,但是我对MSSQL有一定的经验。我被发送了一个脚本来创建一些表,但是由于有BLOB列,在尝试限制大小时遇到​​了一些错误。

我尝试向我的同事询问有关此事,但他们也不确定。基本上是从其他地方抢来的,所以他们不确定如何解决。

本质上,表看起来像这样(表和列名已更改):

CREATE TABLE table1
(
    ID       CHAR(32),
    NAME     CHAR(50),
    KEY      $(BLOB)(64),
    BUFFER   $(BLOB)(20),
    SORTNO   NUMERIC(8) CONSTRAINT UK_WIU UNIQUE,
CONSTRAINT PK_ID PRIMARY KEY (ID)
)
;

运行此命令时,由于美元符号($),出现错误“无效字符”。但是,如果将数据类型更改为BLOB(64),则会收到错误消息,提示“缺少正确的括号”。如果我只是执行“ BLOB”,它将运行正常。有什么方法可以定义BLOB的长度吗?

谢谢

2 个答案:

答案 0 :(得分:0)

不能限制

BLOB列的大小。它允许您存储多达[(4 GB-1)*(数据库块大小)]数据,仅此而已。如果您不需要的话,那就没问题了。

有关BLOB(和其他Oracle 18c数据类型)的更多信息,请访问:https://docs.oracle.com/en/database/oracle/oracle-database/18/sqlrf/Data-Types.html#GUID-1A71C635-188E-4EC9-B821-1DBEC2B45451

您要创建的表在Oracle中将如下所示:

SQL> create table table1
  2    (id     varchar2(32) constraint pk_id primary key,
  3     name   varchar2(50),
  4     sortno number(8) constraint uk_wiu unique,
  5     key    blob,
  6     buffer blob
  7    );

Table created.

SQL>

还有另一个关于您的代码的反对意见:不要使用CHAR,而要使用VARCHAR2(除非您必须这样做); CHAR将用空格右移空格,直到列的最大长度。

答案 1 :(得分:0)

不,列只是定义为CLOB或BLOB。

该列没有大小关联。您可以放入一些restrictions,随心所欲。

“最大大小:(4 GB-1)* DB_BLOCK_SIZE初始化参数(8 TB至128 TB)” ..从Oracle 11g开始。

要限制大小,您可以在应用程序层进行限制-阻止人们上传大于X的文件,尽管具有数据库访问权限的人也可以这样做。

您可以编写一个存储过程来处理INSERT / UPDATES,并在其中有逻辑来防止DML(如果大小太大)。

您也许可以使用函数调用来执行检查约束以获取lob的长度...示例here