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