我通过存储过程将数据从google工作表复制到mysql表中。这张表有大约3000多条记录。复制了大约2000个奇数记录后,我达到了6分钟的执行时间限制。有没有解决这个6分钟的执行时间限制。
function myfunction() {
var colA;
var colB;
var colC;
var colD;
var colE;
var mysqldb = Jdbc.getConnection("jdbc:mysql;dbipaddress","user","pa$$word");
var sql = mysqldb.createStatement();
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1');
var data = sheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) {
colA = data[i][0];
colB = data[i][1];
colC = data[i][2];
colD = data[i][3];
colE = data[i][4];
var query = "{call [dbo].[sp_copygsheets](?,?,?,?,?)}";
sql = mysqldb.prepareCall(query);
sql.setString(1, colA);
sql.setString(2, colB);
sql.setString(3, colC);
sql.setString(4, colD);
sql.setString(5, colE);
sql.executeUpdate();
}
sql.close();
mysqldb.close();
}
答案 0 :(得分:1)
无法访问要测试的SQL数据库,并且在Google AppScripts中使用JDBC的经验很少,我将不得不做出一些假设
我将假设for
循环
for (var i = 1; i < data.length; i++) {
...
}
如果有,您是否尝试将循环限制为在6分钟时限内完成并将i
的最后一个值保存为user property?然后,您可以多次运行该脚本,直到脚本被标记为已完成(例如,另一个用户属性)。
E.g。类似的东西:
var startVal = PropertiesService.getUserProperties().getProperty("lastLoop");
for (var i = startVal; i < numLoops; i++) {
...
}
var newProp = {myStartVal: startVal+numLoops};
PropertiesService.getUserProperties().setProperties(newProp);
然后在时间触发器上设置脚本并使其运行直到numLoops
等于data.length
,这可以在执行for循环之前进行测试。
不是一个完整的答案,但我希望它能让你朝着正确的方向前进。