MYBATIS+DB2儲存過程驗證SQL語句正確性
阿新 • • 發佈:2019-02-18
1.啟用DB2的explain功能:(需要有操作)
a.執行~sqllib/MISC/EXPLAIN.DDL
b.CALL SYSPROC.SYSINSTALLOBJECTS('EXPLAIN','C',NULL,CURRENT SCHEMA)--需要有DBA的許可權
2.寫DB2儲存過程:
3.在MYBATIS中呼叫:CREATE OR REPLACE PROCEDURE VALIDATE_SQL ( IN P_SQL VARCHAR(256), OUT P_RESULT INTEGER ) SPECIFIC "SQL140507095557152" LANGUAGE SQL NOT DETERMINISTIC EXTERNAL ACTION MODIFIES SQL DATA INHERIT SPECIAL REGISTERS OLD SAVEPOINT LEVEL BEGIN DECLARE exit HANDLER FOR sqlexception set P_RESULT = 0; BEGIN set current explain mode explain; EXECUTE IMMEDIATE P_SQL; set current explain mode no; SET P_RESULT = 1; END; END;
SERVICE:
Map<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("P_SQL", "111111111111111");
paramMap.put("P_RESULT", 0);
datacleanDetailDefMapper.validateSql(paramMap);
int result = (Integer) paramMap.get("P_RESULT");
MAPPER:
public void validateSql(Map paramMap);
XML:
如果SQL可以執行,則P_RESULT為1,如果SQL執行中出現錯誤,則P_RESULT為0.<select id="validateSql" statementType="CALLABLE" parameterType="map" resultType="map"> CALL VALIDATE_SQL( #{P_SQL, mode=IN, jdbcType=VARCHAR }, #{P_RESULT, mode=OUT, jdbcType=INTEGER } ) </select>