对于String,SQL太长了

Kyl*_*yle 2 sql string oracle vba excel-vba

我有以下SQL要查询.这是一个有效的SQL.不幸的是,对于VBA中的字符串来说太长了.任何人都知道运行此查询的解决方法?

SQL = "SELECT A.cust_ky, A.incid_id, A.OPEN_TS, A.CLOSE_TS, A.REC_UPD_TS, B.wrkgp_id, A.CURR_AGNT_KY, A.incid_ttl_dn " _
    & "FROM (MAINTBLS.INCID_FAB A INNER JOIN MAINTBLS.DEPTMNT B ON A.curr_wrkgp_ky=B.wrkgp_ky) " _
    & "WHERE B.wrkgp_id='" & wrkgp & "' And (A.open_fg = 1 OR A.pend_fg = 1)" _
    & "ORDER BY A.cust_ky, A.curr_agnt_ky ASC"

rs.Open SQL, con, adOpenKeyset
Run Code Online (Sandbox Code Playgroud)

use*_*017 5

由于使用Oracle,因此应使用绑定变量而不是动态SQL,然后在命令对象的参数集合中设置值.它不仅会阻止SQL注入,还会更好地优化您的查询.

此外,看起来您的SQL语句在order by子句之前缺少空格.这可能很容易导致您的错误.见下文 - 未经测试,但应该给你一个想法.

SQL = "SELECT A.cust_ky, A.incid_id, A.OPEN_TS, A.CLOSE_TS, A.REC_UPD_TS, B.wrkgp_id, A.CURR_AGNT_KY, A.incid_ttl_dn " _
    & "FROM (MAINTBLS.INCID_FAB A INNER JOIN MAINTBLS.DEPTMNT B ON A.curr_wrkgp_ky=B.wrkgp_ky) " _
    & "WHERE B.wrkgp_id= :wrkgp And (A.open_fg = 1 OR A.pend_fg = 1) " _
    & "ORDER BY A.cust_ky, A.curr_agnt_ky ASC"

   With cmd
     .ActiveConnection = conn
     .CommandText = SQL
     .CommandType = adCmdText
     .Parameters.Append .CreateParameter(, adVarChar, adParamInput, wrkgp)
   End With
Run Code Online (Sandbox Code Playgroud)