0

在我的 TACL 中,我试图创建一个变量用作 SQLCI 命令的输入。我想使用带有 % 作为通配符的 LIKE 子句。每次将 % 替换为 ? 导致 SQL 语句不返回所需的结果。

代码片段:

 ?TACL macro
 #Frame
 #Set #informat plain
 #Set #outformat pretty
 #Push stoprun DC fidata var1 mailmast sqlvol sqlsvol IsOpen EMLFile ans emlline
 #Push mailfile mfile likeit charaddr sqlin sqlout test
 [#Def True text |body|-1]
 [#Def False text |body|0]

中间代码剪切以减少长度 - 剪切代码有效

 == select <program name> from <full mailmast filename> where mm_file_prefix
 == like "<likename>%" for browse access;
 [#If Not [StopRun]
 |then|
   #Setv test "~%"
   #Set #trace -1
   #Set SqlIn select mm_program_name from [mailmast] where mm_file_prefix
   #appendv sqlin "like ""[LikeIt]~%"" for browse access;"
   SQLCI/Inv Sqlin,outv sqlout/
 ] == end of if

当我运行代码时,我会显示变量,并且它已将 % 替换为 ?

-TRACE- -19-st 1 v 调用变量 :MAILMAST.1 #Set SqlIn select mm_program_name from $DATA5.SQL2510.MAILMAST where mm_file_p refix -TRACE- -20- #appendv sqlin "like ""[LikeIt] ^ -TRACE- -20- 调用变量 :LIKEIT.1 #appendv sqlin "like ""ED?"" for browser access;" -TRACE- -20-d test ? -22-st 1 v SQLCI/Inv Sqlin,outv sqlout/ -TRACE - -23-d sqlin select mm_program_name from $DATA5.SQL2510.MAILMAST where mm_file_prefix like "ED?" 用于浏览访问;-24-

由于 % 不是通配符,因此该 SQL 语句无法显示正确的记录。

问题是,如何将 % 放入 TACL 变量而不将其更改为 ?

编辑以用 TACL 宏的开头替换重复的代码 - MEH

4

1 回答 1

1

我真的不喜欢回答我自己的问题,因为那看起来我只是为了让自己看起来很聪明而进行设置,但是在等待的同时继续我的研究,我找到了答案。请参阅下面的代码片段:

?TACL macro
 #Frame
 #Set #informat plain
 #Set #outformat pretty
 #Push stoprun DC fidata var1 mailmast sqlvol sqlsvol IsOpen EMLFile ans emlline
 #Push mailfile mfile likeit charaddr sqlin sqlout test
 [#Def True text |body|-1]
 [#Def False text |body|0]
 [#Def ascii struct
   Begin
     BYTE byt0 value 37;
     CHAR pcent REDEFINES byt0;
   End;
 ] == end of struct

注意结构的添加。这是为了能够为字节分配一个十进制值 37 (%) 并将其重新定义为要在 like 语句中使用的字符。

 == select <program name> from <full mailmast filename> where mm_file_prefix
 == like "<likename>%" for browse access;
 [#If Not [StopRun]
 |then|
   #Set test [ascii:pcent]
   #Set #trace -1
   #Set SqlIn select mm_program_name from [mailmast] where mm_file_prefix
   #append sqlin like "[LikeIt][ascii:pcent]" for browse access;
   SQLCI/Inv Sqlin,outv sqlout/
 ] == end of if

请注意结构 [ascii:pcent] 的使用,这确实有效。

感谢所有阅读我的问题的人。

于 2018-08-30T18:14:36.077 回答