是否可以在创建 table 时设置 BLOB 大小?

Is it possible to set a BLOB size when creating table?

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

我试着问过我的同事这件事,但他们也不确定。这基本上是从其他地方抓取的,所以他们不确定如何解决这个问题。

基本上,table 看起来像这样(table 和列名称已更改):

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)
)
;

当 运行 这个时,我得到错误 "invalid character" 因为美元符号 ($)。但是,如果我将数据类型更改为 BLOB(64),则会收到一条错误消息,提示 "missing right parenthesis." 如果我只执行 "BLOB,",它运行良好。有什么方法可以定义 BLOB 的长度吗?

谢谢

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

Table 您打算在 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 将用空格右填充值,直到列的最大长度。

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

没有与该列关联的大小。大小随心所欲,放几个restrictions

"Maximum size: (4 GB - 1) * DB_BLOCK_SIZE initialization parameter (8 TB to 128 TB)"..从 Oracle 11g 开始。

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

您可以编写一个存储过程来处理 INSERT/UPDATES,如果大小为 'too large.'

,则其中包含防止 DML 的逻辑

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