Open ghostanwb opened 3 years ago
重新调试后发现问题出在mariadb的proc中使用select输出了结果集 如果这种情况,调用存储过程的代码应该如何书写,mysql和sqlserver这类结果集不在输入输出参数的列表的存储过程 原本jdbc使用executeQuery调用,Mycat的注释应该如何书写? stmt.executeUpdate("/* mycat:schema=LINA,list_fields='@p_CURSOR' /CALL test(@caller,@ret);"); 这样的书写似乎没有效果,还是会卡死
mycat没有支持后端接收存储过程的特殊报文,一直使用的方法是在sql中把这个特殊结果存放到变量里,然后select出来,此时这个结果就会变成普通的结果集,能被mycat处理
是不是输出结果集的mysql存储过程mycat是不支持的, 如果jdbc直连mysql执行存储过程先读取结果集,结果集关闭后再取输出参数的方式,这样的存储过程都不能被mycat使用? 那么文档中 11章3.返回结果中有结果集时,则必须加注解,且注解中必须在 list_fields 中包括所有结果集参数名称,以逗号隔开 结果集参数必须在最后 /#mycat: sql=SELECT FROM test where id=1 ,list_fields='@p_CURSOR,@p_CURSOR1' */ 又是什么意思呢?
list_fields='@p_CURSOR,@p_CURSOR1' 这个你要看源码确认一下,好像是数据源是jdbc的时候.oracle的数据源的时候支持游标运算.类似地,可以通过修改源码使用jdbc实现mysql相同的功能
卡在 stmt.executeUpdate("/* mycat:schema=LINA /CALL test(@caller,@ret);");这句 直到超时 经过测试proc里面执行的插入和更新都已经完成了 这是什么配置不对吗? mycat连接的是mariadb10.5.8的galera集群,读写分离没有分片