本想查一下新建VIEW的代码里是否包含特定的字串,结果报错:

SQL> select * from USER_VIEWS where upper(text) like '%MAP%';
select * from USER_VIEWS where upper(text) like '%MAP%'
ORA-00932: 数据类型不一致: 应为 CHAR, 但却获得 LONG

大概补充一下Oracle long类型的知识:

Oracle中的LONG类型有两种:
LONG文本类型,能存储2GB的文本。与VARCHAR2或CHAR类型一样,存储在LONG类型中的文本要进行字符集转换。
LONG RAW类型,能存储2GB的原始二进制数据(不用进行字符集转换的数据)。
在此并不解释如何使用LONG类型,而是会解释为什么你不希望在应用中使用LONG(或LONG RAW)类型。首先要注意的是,Oracle文档在如何处理LONG类型方面描述得很明确。Oracle SQL Reference手册指出:
不要创建带LONG列的表,而应该使用LOB列(CLOB、NCLOB、BLOB)。支持LONG列只是为了保证向后兼容性。

找了一圈,没有内置的函数做转换,参考了一下网上的处理方案,有些太复杂,有些兼容性不太好,反正也不会经常用,本着猿类的懒惰原则,写了个最简的处理方法:

CREATE OR REPLACE FUNCTION LONG_TO_CHAR(IN_WHERE      VARCHAR,IN_TABLE_NAME VARCHAR,IN_COLUMN     VARCHAR2)RETURN VARCHAR2 ASV_RET VARCHAR2(32767);V_SQL VARCHAR2(2000);BEGINV_SQL := 'select ' || UPPER(IN_COLUMN) || ' from' || UPPER(IN_TABLE_NAME) || ' where ' || IN_WHERE;EXECUTE IMMEDIATE V_SQLINTO V_RET;RETURN V_RET;END;
/

使用方法:

--视图应用例子WITH ALLVIEW AS(SELECT UV.*,LONG_TO_CHAR('view_name=''' || VIEW_NAME || '''', 'user_views','TEXT') VTEXTFROM USER_VIEWS UV)
SELECT * FROM ALLVIEW WHERE UPPER(VTEXT) LIKE '%MAP%'--普通表SELECT T.*,LONG_TO_CHAR('rowid=''' || ROWID || '''', 'conf_user', 'user_profile') VTEXTFROM CONF_USER T

Oracle long 类型转 varchar2相关推荐

  1. Oracle number 类型转换为 varchar2

    项目初期表结构设计是非常重要,在字段类型定义样也要格外小心,业务开展后,修改字段类型代价非常大.本文主要记录在 oracle 中 number 类型转换为 varchar2 数据类型方法以及案例演示. ...

  2. oracle utf8 varchar,Oracle中字符集的类型决定varchar2的字符长度

    1.前几天往数据库表里面插入数据的报了一个这样的错误如下: SQL> insert into student values('中华人民共和',60); insert into student v ...

  3. [转]Oracle中字符集的类型决定varchar2的字符长度

    为什么80%的码农都做不了架构师?>>>    1.前几天往数据库表里面插入数据的报了一个这样的错误如下: SQL> insert into student values('中 ...

  4. Oracle 表已经有数据 修改字段类型,把varchar2类型变成date类型

    Oracle修改字段类型,把varchar2类型变成date类型 表已经有数据 原来表是这样的 create table export ( name varchar2(10), datetimes v ...

  5. oracle nvachar 长度,Oracle中varchar、varchar2和nvarchar、nvarchar2

    在设计Oracle数据库的时候需要为字段选取类型.对数据库中的varchar.varchar2和nvarchar.nvarchar2这几种数据类型一直不知道怎么选取. varchar和varchar2 ...

  6. oracle中的char和j,oracle中char与varchar2的区别

    1. CHAR的长度是固定的,而VARCHAR2的长度是可以变化的, 比如,存储字符串"abc",对于CHAR (20),表示你存储的字符将占20个字节(包括17个空字符),在数据 ...

  7. Oracle自定义类型

    Oracle自定义类型可以通过type/create type来声明或者创建 一,四种创建方式 1.1,使用create type创建object类型 create or replace type o ...

  8. oracle tovarchar2_oracle数据库中varchar2陷阱

    https://www.cnblogs.com/iyangyuan/archive/2013/12/25/3491215.html 对应该类型,在oracle中有三种比较常用的类型:varchar2( ...

  9. oracle字段规则,Oracle的基本操作+Oracle字段类型(zz)

    在Oracle关于时间属性的建表 Example: create tablecourses( cidvarchar(20)not null primary key, cnamevarchar(20)n ...

  10. oracle中varchar与varchar2的区别

    一.oracle中varchar与varchar2的区别 varchar保留,Oracle以支持null将来与空字符串之间的区别,这是ANSI标准规定的. varchar2不区分null和空字符串,也 ...

最新文章

  1. 【怎样写代码】工厂三兄弟之抽象工厂模式(四):抽象工厂模式
  2. java操作LINUX上文件,设置权限问题
  3. 云服务器的操作系统是什么,服务器操作系统是什么?云服务器的操作系统怎么选择...
  4. hdu4609 3-idiots
  5. 在OpenShift上部署Java EE微服务
  6. AudioParam
  7. prettytensor 的使用
  8. powershell快捷键_使用键盘快捷方式启动powershell脚本
  9. 奶制品的生产lingo软件编辑
  10. 启动马达接线实物图_三相电机直接启动接线图及启动过程解说
  11. android的平台签名工具,《安卓开发》APK签名工具使用方法
  12. 银行资管智能化转型迫在眉睫 金融壹账通赋能两大核心能力
  13. java 整型数组定义_在Java中定义一个具有10个元素的整型数组a的语句是:___
  14. 【javaEE】网络编程套接字
  15. 吴恩达 DeepLearning 第二课第三周题目(包括选择题)
  16. 默纳克调试说明书_默纳克 - NICE3000调试说明书(修改版) -
  17. 微信公众号通过图片选取接口上传到阿里oss
  18. 高等数学(预备知识之函数的单调性、最值与奇偶性)
  19. 后李健熙时代的三星,将迎来怎样变局?
  20. 《个人信息保护条例》

热门文章

  1. UCDOS和鲍岳桥and 我和我的嵌入式GUI(DOS,Linux,uC/OS-II等)
  2. 郑州大学linux安装锐捷客户端
  3. 奇东锐腾服务器无法显示,奇东锐腾pxe全自动网刻工具
  4. 通过PyMuPDF编写增值税发票多PDF文件合并工具
  5. H264编码格式--图文解释
  6. BugKu 旋转跳跃(mp3stego(mp3隐写工具)的使用)
  7. linux wav 转mp3,linux下wav转换为mp3
  8. 给一个函数求导MATLAB,matlab求导
  9. 中标麒麟安装mysql教程_中标麒麟上安装配置达梦数据库7
  10. 用计算机键盘如何截屏,键盘上哪个键是截图 电脑键盘截图快捷键用法