oracle的long类型字段的应用

2023-10-28

1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。

2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。

3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。

4、很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的。

5、LONG 数据类型的使用中,要受限于磁盘的大小。

能够操作 LONG 的 SQL 语句:

1、Select语句

2、Update语句中的SET语句

3、Insert语句中的VALUES语句

限制:

1、一个表中只能包含一个 LONG 类型的列。

2、不能索引LONG类型列。

3、不能将含有LONG类型列的表作聚簇。

4、不能在SQL*Plus中将LONG类型列的数值插入到另一个表格中,如insert into …select。

5、不能在SQL*Plus中通过查询其他表的方式来创建LONG类型列,如create table as select。

6、不能对LONG类型列加约束条件(NULL、NOT NULL、DEFAULT除外),如:关键字列(PRIMARY KEY)不能是 LONG 数据类型。

7、LONG类型列不能用在Select的以下子句中:where、group by、order by,以及带有distinct的select语句中。

8、LONG类型列不能用于分布查询。

9、PL/SQL过程块的变量不能定义为LONG类型。

10、LONG类型列不能被SQL函数所改变,如:substr、instr。

因为long类型的数值不能用insert into … select的方法插入,故我们要分两步走,先插入其它字段,最后再插入long类型字段,这可以通过过程来实现.下面是一个我做实验实现的例子.

SQL>; create table testlong (id number,name varchar2(12),history long);

表已创建。

SQL>; create table testlong1 (id number,name varchar2(12),history long);

表已创建。

SQL>; insert into testlong values(1,’tslxg’,'work in tangshan’);

已创建 1 行。
SQL>; insert into testlong values(2,’imakee’,'work in beiing’);

已创建 1 行。

SQL>; select * from testlong;

ID NAME
———- ————————
HISTORY
——————————————————————————–

1 tslxg
work in tangshan

2 imakee
work in beijing

SQL>; insert into testlong1 select * from testlong;
insert into testlong1 select * from testlong
*
ERROR 位于第 1 行:
ORA-00997: 非法使用 LONG 数据类型

SQL>; Declare
2 CURSOR bcur
3 IS SELECT id,history from testlong;
4 brec bcur%ROWTYPE;
5 BEGIN
6 insert into testlong1(id,name) select id,name from testlong;–其它类型
先插入
7 OPEN bcur;
8 LOOP
9 FETCH bcur INTO brec;
10 EXIT WHEN bcur%NOTFOUND;
11 update testlong1 set history=brec.history where id=brec.id;
12 END LOOP;
13 CLOSE bcur;
14 END;
15 /

PL/SQL 过程已成功完成。

SQL>; select * from testlong1;

ID NAME
———- ————————
HISTORY
————————————————————————–

1 tslxg
work in tangshan

2 imakee
work in beijing

LONG列不能出现在SQL语句的某些部分:
1、在WHERE、GROUP BY、ORDER BY、CONNECT BY子句以及在具有DISTINCT 操作的SELECT语句中。
2、SQL函数(如SUBSTR或INSTR)
3、表达式或条件。
4、包含有GROUP BY子句的查询的选择表。
5、在子查询的选择表或由集合操作组合查询选择表。
6、CREATE TABLE AS SELECT语句的选择表。

使用说明:

1、LONG 数据类型中存储的是可变长字符串,最大长度限制是2GB。
2、对于超出一定长度的文本,基本只能用LONG类型来存储,数据字典中很多对象的定义就是用LONG来存储的。
3、LONG类型主要用于不需要作字符串搜索的长串数据,如果要进行字符搜索就要用varchar2类型。
4、很多工具,包括SQL*Plus,处理LONG 数据类型都是很困难的。
5、LONG 数据类型的使用中,要受限于磁盘的大小。

能够操作 LONG 的 SQL 语句:

1、Select语句
2、Update语句中的SET语句
3、Insert语句中的VALUES语句

限制:

1、一个表中只能包含一个 LONG 类型的列。
2、不能索引LONG类型列。
3、不能将含有LONG类型列的表作聚簇。
4、不能在SQL*Plus中将LONG类型列的数值插入到另一个表格中,如insert into …select。
5、不能在SQL*Plus中通过查询其他表的方式来创建LONG类型列,如create table as select。
6、不能对LONG类型列加约束条件(NULL、NOT NULL、DEFAULT除外),如:关键字列(PRIMARY KEY)不能是 LONG 数据类型。
7、LONG类型列不能用在Select的以下子句中:where、group by、order by,以及带有distinct的select语句中。8、LONG类型列不能用于分布查询。
9、PL/SQL过程块的变量不能定义为LONG类型。
10、LONG类型列不能被SQL函数所改变,如:substr、instr。

利用Oracle long类型字段,插入大文本

在编写应用时,需要大量的插入大文本,但是oracle 的clob操作起来比较繁琐,应此我没有选择使用clob,而是使用了oracle以前版本中的long类型[但是long类型有一些限制,在一个表中只能有一个long字段]。

开始的时候我直接使用insert into table1 values(a,b[long])的方式插入数据库,但是oracle有些限制一条语句不能超过4000个字符,并报ORA-01704的错误。

经过查找oracle 的文档找到了解决的方法,就是对于long的字段使用setCharacterStream()方法将String插入数据库。

代码:
sql=”insert into msg_info values (?,?,?,?[long类型字段],’C',sysdate,sysdate+”+msgterm+”,?)”;
pstat1 = conn.prepareStatement(sql);
pstat1.setLong(1, msg_id);
pstat1.setInt(2, msg_gp_id);
pstat1.setString(3, msg_title);
pstat1.setCharacterStream(4,new StringReader(msg_info.toString()),msg_info.length());
conn.commit();
pstat1.setLong(5, this.upid);

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

oracle的long类型字段的应用 的相关文章

  • 如何为不存在的值创建一行并用 0 值填充计数?

    在 SQL Server 中 我对数据上的用户年龄组运行查询 其中 在某些年里 每个年龄组的用户数为零 例如 2013 年有 18 21 年龄组的用户 因此查询返回下一个年龄组 22 25 作为第一行 因为没有包含 18 21 的条目 相反
  • SQL 执行计划是基于架构还是数据,或者两者兼而有之?

    我希望这个问题不太明显 我已经找到了很多关于解释执行计划的好信息 但有一个问题我还没有找到答案 该计划 更具体地说是相对 CPU 成本 仅基于架构 还是数据库中当前的实际数据 我尝试对我的产品数据库中需要索引的位置进行一些分析 但正在使用我
  • oracle嵌套表的最大行数是多少

    CREATE TYPE nums list AS TABLE OF NUMBER Oracle 嵌套表中最大可能的行数是多少 UPDATE CREATE TYPE nums list AS TABLE OF NUMBER CREATE OR
  • 向 sql select 查询添加新的空列

    我有以下 sql 选择查询 select column1 column2 from mytable 是一种向表中不存在的查询添加空列的方法 例如 select column1 column2 empty int column from my
  • Informix:带有输出参数的程序?

    我搜索了很多 但找不到任何东西 我只是想问是否有任何方法可以创建和调用过程 Informix 没有参数 我知道如何返回一个或多个值 对于过程和函数 但这不是我想要的 如果 Informix 不允许输出参数 那就真的很奇怪了 提前致谢 EDI
  • 为什么 Sql Server 2000 上的 TSQL 对小数点的舍入不一致?

    我正在尝试计算美元金额的折扣百分比 在 50 的情况下 有时你会得到半分钱 我需要将其四舍五入到最接近的一分钱 在Sql中 我的计算如下 round retail 0 5 2 0 如果我采用以下值 我会得到不同的结果 4 39 2 49 不
  • 使用每个单独行的多个“where”子句更新多行

    我正在尝试像这样更新我的表 Update MyTable SET value 1 WHERE game id 1 x 4 y 8 SET value 2 WHERE game id 1 x 3 y 7 SET value 3 WHERE g
  • T-SQL - 字符串连接

    希望有人可以提供帮助 我是一个新手 SQL 黑客 而且确实很糟糕 我在 SQL Server 2005 上有两个表 TABLE 1 和 TABLE2 TABLE1 COL1 COL2 1 10 2 20 3 30 4 10 4 20 5 2
  • 帮助将二进制图像数据从 SQL Server 读取到 PHP 中

    我似乎无法找到将二进制数据从 SQL 服务器读取到 PHP 的方法 我正在开发一个项目 需要能够将图像直接存储在 SQL 表中 而不是文件系统上 目前 我一直在使用这样的查询 插入 myTable 文档 选择 从 OPENROWSET BU
  • Postgresql 和 jsonb - 将键/值插入多级数组

    非常类似于这个帖子 https stackoverflow com questions 58959678 postgresql add key to each objects of an jsonb array 但我很难适应他们的解决方案
  • SQL 语法检查器和验证器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有类似 SQL 的 lint 语法检查器和验证器 之类的东西 有一个项目 SQLLint 检测 S
  • 分组依据检索 3 个值

    我有以下查询 SELECT Cod MIN Id AS id Min MAX Id AS id Max retrieve value in the middle COUNT AS Tot FROM Table a NOLOCK GROUP
  • 在旧版本的 MySQL (<5.5.0) 中模拟 TO_SECONDS()

    出于性能和简单性的原因 我想以秒的形式获取 MySQL 3 x 服务器中 DATETIME 列的内容 或者实际上任何数字类型 我只是想在使用 UNIX TIMESTAMP 时避免所有明显的时区问题 the我表中的日期确实来自不同的区域设置
  • SQL 性能,使用 OPTION (FAST n)

    谁能告诉我在 SQL 查询中使用 OPTION FAST n 有什么缺点 比如我这么快就抓取了10万条记录 但这对SQL Server的其他进程有影响吗 我正在接近我的问题 我必须每周运行一次数据处理 因此 第一个结果会在 5 7 秒后出现
  • 如何获取共同好友列表

    你好 我想知道如何才能找到共同的朋友 我目前在思考这个问题时遇到问题 我有一个名为 users 的表 它是这样的 id name 1 Kenny 2 Jack 3 Jimmy 4 Chris 5 Meg 6 Jake 7 Micheal 8
  • 如何查看任意 Oracle 会话正在使用的事务隔离级别

    我试图找出特定会话 不是我自己的会话 在 Oracle 服务器上的隔离级别 有 v 视图可以得到这个吗 您可以在中测试位 28flag列于v transaction 1 http forums oracle com forums threa
  • Postgres 上的 C 语言环境和 Posix 语言环境有什么区别?

    我知道 Postgres 上的数据库区域设置负责国家字符的正确顺序 正确的小写 大写等 但为什么有两种语言中立的语言环境 posix and c 它们之间有什么区别 还是只是一个中立的语言环境有两个不同的名称 UPDATE正如 Magnus
  • 如何在 SQL 中进行广度优先搜索?

    给定一棵存储为关系的树 Parent Child 1 2 1 3 3 4 3 5 2 6 7 8 7 9 如何获取给定节点的所有后代 例如 对于 1
  • ADO.NET 池连接无法重用

    我正在开发一个 ASP NET MVC 应用程序 该应用程序使用 EF 6 x 来处理我的 Azure SDL 数据库 最近 随着负载的增加 应用程序开始进入无法再与 SQL 服务器通信的状态 我可以看到有 100 个到我的数据库的活动连接
  • JbdcTemplate - 带有动态 SQL 查询的PreparedStatements

    I know jdbcTemplate可以用来创建PreparedStatements如果你这样设置 i e private JdbcTemplate jdbcTemplate String sqlQuery Select from tab

随机推荐

  • 02-SpringBoot集成MinIo

    添加依赖
  • 字节对齐

    2018 1 16 对于自己定义的结构体 如果拿该结构体去匹配内存中的一个块内容 有可能不能准确的匹配正确 就比如今天去匹配SSL ClientHello结构体 但是总是往后退了一个字节 而且非常准 这其实是编译器的问题 gcc默认是4字节
  • 高亮地图点及属性信息展示优化方案

    作者 小阳 1 序言 本文主要是利用了UTFGrid图层快速交互获取地物信息的特点 以SuperMap iClient for JavaScript的开发作为示范 注 要实现本文所讲述的功能 同时需要SuperMap iServer和Sup
  • 2023中国数据安全防护与治理市场研究报告

    随着数字经济的快速发展 数据成为重要的生产要素 数据安全面临较为严峻的态势 数据安全市场迎来较大机遇 赛迪顾问重点发布了中国数据安全防护与治理产品及服务全景图 并对各类产品及服务做了成熟度评价 形成了中国数据安全防护与治理产品及服务成熟度曲
  • 视频网站需要流媒体服务器吗,视频监控必须用流媒体服务器吗

    视频监控必须用流媒体服务器吗 内容精选 换一换 task input参数说明参数是否必选类型说明type是String视频数据的输入类型 obs 表示从华为云OBS中读取视频数据 url 表示从指定的URL地址中读取视频数据 edgecam
  • Halcon HTuple由按行排序转成按列排序

    目录 前言 方法 结果 前言 今天有一个需求 把一个HTuple的列表重新排序 列表保存的是由二维展开成一维的数据 先按行保存 存完一行再存下一行 如今需要变一下 改成先保存一列 存完一列后在保存下一列 如有一个二维表格如下 1 2 3 4
  • MySQL主备、主从、读写分离详解

    一 MySQL主备的基本原理 在状态1中 客户端的读写都直接访问节点A 而节点B是A的备库 只是将A的更新都同步过来 到本地执行 这样可以保持节点B和A的数据是相同的 当需要切换的时候 就切成状态2 这时候客户端读写访问的都是节点B 而节点
  • 激光雷达-相机外参联合标定通过手动选取3D-2D点利用PnP求解

    0 写在前面 差不多快半年没有更新博客了 这里先感慨一下找工作的不容易 这个激光雷达 相机联合标定的需求是因为我前段时间所做的项目中有一个需求 需要给点云添加对应的温度 没错 给点云加温度 从红外相机中获取到温度 1 激光雷达 gt 相机的
  • Node.js 源码安装

    Node js 源码安装 以下部分我们将介绍在Ubuntu Linux下安装 Node js 其他的Linux系统下安装步骤 在 Github 上获取 Node js 源码 sudo git clone https github com n
  • layui tableSelect 数据表格下拉框(多选或单选)

    记录 使用tableSelect插件实现下拉框表格 并多选或单选数据 HTML代码 tr td td tr
  • 设计模式之命令模式

    介绍 在软件开发系统中 方法的请求者 与 方法的实现者 之间经常存在紧密的耦合关系 这不利于软件功能的扩展与维护 例如 想对方法进行 撤销 重做 记录 等处理都很不方便 因此 如何将方法的请求者与实现者解耦 变得很重要 命令模式就能很好地解
  • 指针数组,字符串通过读取地址输出

    53条消息 用首地址可以输出字符串的解释 字符串首地址 xumengfan的博客 CSDN博客https blog csdn net xumengfan article details 78148317 include
  • 代码静态分析工具的误报原因分析

    1 引言 本篇文章分析了代码静态分析的基本原理以产生误报的根本原因 并介绍了形式化方法在LDRA工具套件中的应用情况 文章从实际工程应用的角度阐述了这些形式化方法的局限性 在参考文献1 Formal Methods Implemented
  • 干货丨Hadoop安装步骤!详解各目录内容及作用

    Hadoop是Apache基金会面向全球开源的产品之一 任何用户都可以从Apache Hadoop 官网下载使用 今天 播妞将以编写时较为稳定的Hadoop2 7 4版本为例 详细讲解Hadoop的安装 先将下载的hadoop 2 7 4
  • UE5-虚拟阴影贴图(测试版)虚化阴影

    优化我们的阴影贴图效果 参考视频 https www bilibili com video BV155411g7Vz 在项目设置里 阴影 改为 虚拟阴影贴图 测试版 这里针对 阳光 要虚化阴影 产生越远越虚化的效果 修改 源角度 数字越大
  • Linux 解压tar

    Linux系统中tar压缩包怎么解压 Linux系统中有一个tar压缩包格式的文件需要解压 但是linux系统中没有找到tar的命令 该怎么办呢 下面我们就来看看详细的教程 需要的朋友可以参考下 在Linux的默认的版本中不是所有的命令都有
  • Qt使用qDebug()打印变量十六进制

    在Qt中打印变量的十六进制 在Qt中 我们可以通过以下代码来打印变量的十六进制 define HexPrint packet size QByteArray data const char packet size QString hexSt
  • 详解豪斯道夫距离(Hausdorff distance)一

    转载自 http www cnblogs com yhlx125 p 5478147 html Hausdorff距离是描述两组点集之间相似程度的一种量度 它是两个点集之间距离的一种定义形式 假设有两组集合A a1 ap B b1 bq 则
  • ibm hacmp双机服务器系统的解决方案,IBM HACMP双机服务器系统的解决方案

    IT168 专稿 Hacmp High Availability Cluster Multi Processing 双机热备份软件的主要功能是提高客户计算机系统及其应用的可靠性 而不是单台主机的可靠性 一 Hacmp双机系统的工作原理 HA
  • oracle的long类型字段的应用

    1 LONG 数据类型中存储的是可变长字符串 最大长度限制是2GB 2 对于超出一定长度的文本 基本只能用LONG类型来存储 数据字典中很多对象的定义就是用LONG来存储的 3 LONG类型主要用于不需要作字符串搜索的长串数据 如果要进行字