由于已知Progress提供了4种大型对象数据类型数据类型MEMPTR,CLOB,BLOB,LONGCHAR。
但是字符串函数不能在CLOB或LONGCHAR数据类型上使用。
如何对这些LOB数据类型执行字符串操作。 “字符串操作”表示可以对字符串执行的子字符串,替换,修剪等功能。更清楚
将vChar定义为字符INITIAL“ashdbi”NO_UNDO。 消息子站(vChar,1,1) VIEW-AS ALERT_BOX。
我们可以在LOB上执行字符串操作吗?
答案 0 :(得分:4)
CLOB存储在数据库中,LONGCHAR是用于在本地操作它的数据类型。如果您存储BLOB,如果要在本地处理它,则必须使用MEMPTR。
由于您询问与STRING相关的函数,我假设您正在使用CLOBS和LONGCHAR(CLOB = Chararcter Large Object,因为BLOB =二进制大对象)。
可以在LONGCHARS上使用几个(或一些)字符串操作方法和函数,例如SUBSTRING。无论您使用的是CHARACTER还是LONGCHAR,都会显示语法。如果你想
示例 - SUBSTRING,INDEX和COPY-LOB
DEFINE VARIABLE cStart AS LONGCHAR NO-UNDO.
DEFINE VARIABLE cEnd AS LONGCHAR NO-UNDO.
DEFINE VARIABLE cString AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
/* Fill the variable with lots of bogus data */
DO i = 1 TO 10000:
cStart = cStart + "ABCDEFGHIJKLMN".
/* Insert a _ once in 100 */
IF RANDOM(1, 100) = 100 THEN cStart = cStart + "_".
END.
DISPLAY LENGTH(cStart).
/* SUBSTRING */
cEnd = SUBSTRING(cStart, 1, 100000).
DISPLAY LENGTH(cEnd).
/* Is there a _ in the string - most likely! */
DISPLAY INDEX(cStart, "_").
/* SUBSTRING will convert output to CHARACTER if the length is less than roughly 32k */
cString = SUBSTRING(cStart, 1, 30000).
DISPLAY cString.
/* Lets save the CLOB so we can look at it */
COPY-LOB FROM cStart TO FILE "c:\temp\testing.txt".
/* Actually you can DISPLAY a LONGCHAR as well but why would you really? */
DISPLAY cStart
VIEW-AS EDITOR LARGE INNER-LINES 300 INNER-CHARS 300
WITH FRAME x1 WIDTH 320 .
答案 1 :(得分:1)
旧版本中有一些例外,但“字符串函数”在longchar数据上运行良好。
要获取各种大对象(CLOB,BLOB,MEMPTR和文件)之间的数据以及LONGCHAR和反之,您需要使用COPY-LOB语句。怀疑那是你遗失的“秘密酱”。
例如:
define variable cfgData as longchar no-undo.
assign file-info:file-name = search( "etc/stomp.cfg" ).
copy-lob from file file-info:full-pathname to cfgData no-error.
stompCfg = new dotr.Stomp.StompConfig().
assign
stompCfg:StompPort = "61613"
stompCfg:StompServer = entry( 1, cfgData, ":" )
stompCfg:StompPort = entry( 2, cfgData, ":" ) when num-entries( cfgData, ":" ) > 1
stompCfg:LargeMessageSupport = yes
.