是否可以在创建 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
我是 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