【问题标题】:Is it possible to set a BLOB size when creating table?创建表时是否可以设置 BLOB 大小?
【发布时间】:2019-05-06 19:25:16
【问题描述】:

我是 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 的长度吗?

谢谢

【问题讨论】:

    标签: oracle oracle18c


    【解决方案1】:

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

    【讨论】:

    • 谢谢,那我就用BLOB。我不确定他们从哪里得到长度。使用 VARCHAR2 的好技巧。我也必须得到允许才能更改它,但我看不出有任何理由不将它用于我们的数据。
    【解决方案2】:

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

    没有与列关联的大小。你可以放一些你喜欢的大小的东西,有几个restrictions

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

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

    您可以编写一个用于处理 INSERT/UPDATES 的存储过程,并在其中设置逻辑以防止在大小“太大”时出现 DML。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-18
      • 2023-01-04
      • 2011-10-07
      • 1970-01-01
      • 2011-03-18
      • 2014-10-03
      • 2016-09-07
      相关资源
      最近更新 更多