SQL SE大切诺基VE本田CR-V CHAGL450 ( integer_expression 卡

作者:操作系统

透过OTL连接MYSQL,字段长度超越341就不会回去结果集。前日mysql从5.1升任到5.7,centos从6.5晋级到7,就应时而生了这么些标题。非常吃惊。如:selectCONVERT(OperateTime,CHA凯雷德(340卡塔尔卡塔尔国;就能够成功selectCONVERT(OperateTime,CHA索罗德(341卡塔尔卡塔尔;就能失败。确认了是独有选用OTL的时候会出现这么些主题材料。晋级到最新的OTL4.h也绝非用。求助

鲜明难题:
1.积存进程有入参
2.回来结果集有一个字段长度>341
3.该字段内容有1个以上的字符。

  大目的和NULL值

大目的和NULL值的操作,与别的项目标字段有极大的分别。对于大目标与NULL的处理方式分为下边二种状态:

一、Oracle 7/8/8i/9i/10g's LONG, Oracle 7/8's LONG RAW, MS SQL Server/Sybase's TEXT, MS SQL Server/Sybase's IMAGE, DB2's CLOB/BLOB:

相持于日常的数据库类型,以上那些大目的足以由此二种模式设置为空。一是往流里面写入一个otl_null(卡塔尔国值;二是由此调用otl_long_string::set_len(0卡塔尔国把大对象值设置为0.

对于出口,也可能有三种方法用来检查测量检验是还是不是为空。一是经过is_null(卡塔尔实行判别;二是因而otl_long_string::len(State of Qatar获取结果后与0举办相比。

二、Oracle 8/8i/9i/10g's CLOB, Oracle 8/8i/9i/10g's BLOB:

对此以上的数据库类型,对于大目的空值的推断,在输入参数上,与地点的是同生机勃勃的富有两川方式管理。不过对于出口参数的拍卖上,则不能不通过otl_long_string::len(State of Qatar再次来到值与0举行比较。所以推举应用otl_long_string::len(卡塔尔操作来判别空值。

下边分别介绍一个otl_操作系统,long_string类和otl_long_unicode_string类。

SQL SERVER 2000

就能够冒出otL输出不了结果集的难题。不明了原因

otl_long_string

 

序号

函数、成员变量

说明

1

unsigned char * v;

指向LOB值的指针。

2

otl_long_string(…)

序号

参数

说明

1

const int buffer_size = 32760

定义LOB缓冲区大小

2

const int input_length = 0

定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用

 

构造函数。创建一个otl_long_string的实例。主要是分配内存,并设置内部变量。

为了保证能分配到正确的大小,otl_connect::set_max_long_size()必须声明的大于或等于otl_long_string的缓冲区大小。

3

otl_long_string(…)

序号

参数

说明

1

const void * external_buffer

指向外部缓冲区的指针

2

const int buffer_size = 32760

定义LOB缓冲区大小

3

const int input_length = 0

定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用

 

构造函数。该函数通过定义一个指针指向外部的一个缓冲区来替代默认的缓冲区。同时原来的缓冲区不再分配空间。

4

void set_len(const int len = 0)

动态的设置缓冲区大小。它必须在写LOB值之前调用。

5

void set_last_piece(

const bool last_piece = false)

仅对OCI8i/9i/10g/11g有效。对于ODBC和DB2 CLI不起作用。

当otl_long_string与otl_lob_stream同时使用的时候,该函数表明otl_string_string是写入otl_stream里面的最后一个序列。

6

int len()

返回缓冲区的大小。

7

unsigned char & operator[](int ndx)

读取LOB里面非法的字节。

8

otl_long_string & operator =

(const otl_long_string&)

赋值构造函数

9

otl_long_string(

const otl_long_string&)

拷贝构造函数

 

 

操作系统 1

通过OTL连接MYSQL ,字段长度超越341就不会回来结果集? 20C
透过OTL连接MYSQL ,字段长度超越341就不会回去结果集。
明日mysql 从5.1晋级到5.7,centos从6.5进级到7,就现身了这些标题。
非常吃惊。
如: select CONVERT(OperateTime, CHA途观; 就能够成功
select CONVERT(OperateTime, CHATiguan; 就能够停业。
确认了是唯有接受OTL的时候会师世这几个主题素材。晋级到新型的OTL4.h也尚无用。

 otl_long_string/olt_long_unicode_string

那五个类重视用以处理大指标数据。从OTL4.0本子开首,otl_long_string还足以拍卖其余类型的RAW/BIAN瑞鹰Y类型。上边列出了周围数据库的片段大指标类型:

·             Oracle 7: LONG, RAW, LONG RAW

·             Oracle 8, 8i, 9i, 10g, 11g: LONG, RAW, LONG RAW; CLOB, BLOB

·             MS SQL Server: TEXT, IMAGE, VARBINARY, BINARY, VARCHAR(MAX), VARBINARY(MAX)

·             DB2: CLOB, BLOB

·             Sybase: TEXT, IMAGE, VARBINARY, BINARY

·             PostgreSQL: TEXT, BYTEA,

·             SAP/MAX DB: CHAR() BYTE, VARCHAR() BYTE, LONG VARCHAR, LONG VARCHAR BYTE

·             MySQL: LONGTEXT, LONGBLOB, VARBINARY, BINARY

otl_long_unicode_string是用来管理UNICODE字符的大指标类型,它能够管理下边这一个品种:

·             Oracle 8i, 9i, 10g: LONG,  CLOB; the database default character set may be set to ASCII, or UTF-8, etc

·             Oracle 8i, 9i, 10g: NCLOB; the database national character set may be set to whatever is allowed for a concrete version of the database (8i and 9i/10g differ / are not the same in that regard, as far as supporting different versions of Unicode, and what sets are allowed for national character data types)

·             MS SQL NTEXT

·             DB2 CLOB / DBCLOB when the database supports Unicode (UTF-8, UCS-2, etc.)

假诺定义了OTL_UNICODE宏,那么对于ORACLE的LONG RAWS/BLOB,MS SQL IMAGES,DB2 BLOBS等仍要通过otl_long_string来管理。因为他俩仍是大目的。

OTL还定义了下列项目用于拍卖LOBS类型。

  • varchar_long for Oracle 7/8/8i/9i/10g LONG, MS SQL Server/Sybase TEXT/NTEXT, DB2 CLOB/DBCLOB
  • raw_long for Oracle 7/8/8i/9i/10g RAW, LONG RAW, MS SQL Server/Sybase IMAGE, DB2 BLOB
  • clob for Oracle 8/8i/9i/10g CLOB, NCLOB (if #define OTL_UNICODE is enabled).
  • blob for Oracle 8/8i/9i/10g BLOB

 

  otl_long_unicode_string

 

序号

函数、成员变量

说明

1

otl_long_unicode_string(…)

序号

参数

说明

1

const int buffer_size = 32760

定义LOB缓冲区大小

2

const int input_length = 0

定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用

 

构造函数。创建一个otl_long_unicode_string的实例。主要是分配内存,并设置内部变量。

为了保证能分配到正确的大小,otl_connect::set_max_long_size()必须声明的大于或等于otl_long_string的缓冲区大小。

2

otl_long_unicode_string(…)

序号

参数

说明

1

const void * external_buffer

指向外部缓冲区的指针

2

const int buffer_size = 32760

定义LOB缓冲区大小

3

const int input_length = 0

定义实际的输入字符串长度,如果这个使用了,那么set_len()就可以不必调用

 

构造函数。该函数通过定义一个指针指向外部的一个缓冲区来替代默认的缓冲区。同时原来的缓冲区不再分配空间。

3

void set_len(const int len = 0)

动态的设置缓冲区大小。它必须在写LOB值之前调用。

4

int len(void)

返回缓冲区的大小。

5

unsigned short & operator[](int ndx)

读取LOB里面非法的字节。

6

otl_long_unicode_string & operator =

(const otl_long_unicode_string)

赋值构造函数

7

otl_long_unicode_string(

const otl_long_unicode_string&)

拷贝构造函数

操作系统 2

本文由ca88发布,转载请注明来源

关键词: o 升级到 字段 长度 奇怪