垠迹信息科技 2016-04-26 14:13 采纳率: 57.1%
浏览 2305
已采纳

Java执行删除/创建临时表的存储过程时,获取的影响行数总是-1,求大师指点

如题所述,使用Java代码执行删除、创建临时表的存储过程时总是执行不成功(不报错,
但是获取的影响行数为-1),别的存储过程都可以执行成功,求大师指点啊,
存储过程和Java代码如下:
1、存储过程代码
ALTER PROCEDURE [dbo].[PROC_TEMP]
AS
BEGIN
if object_id('tempdb..##temp') is not null
Begin

DROP TABLE ##temp
End

select identity(int) id0,* into ##temp from AlarmRecordRe ORDER BY [TIMESTAMP] DESC
END

2、Java代码
String sql = "{call PROC_TEMP}";
CallableStatement proc = conn.prepareCall(sql);
proc.execute();
int tmp = proc.getUpdateCount();
System.out.println(tmp);//这里打印出来的总是-1
if (tmp<0)
{
System.out.println("存储过程执行失败");
proc.close();
DBPool.destroyConnection(conn);
return;
}
System.out.println("成功了啊");
proc.close();

  • 写回答

5条回答

  • little_how 2016-04-27 13:45
    关注

    执行动态语句的话:

    mysql:
    create procedure p_drop_table_if_exist_v2(p_table_name varchar(20))
    begin
    declare v_table_name varchar(20);
    declare exit handler for not found begin end;
    select distinct table_name into v_table_name from information_schema.columns WHERE table_name = p_table_name;
    if length(v_table_name)>0 then
    set @sql=concat('drop table ', p_table_name);
    prepare dtb from @sql;
    execute dtb;
    deallocate prepare dtb;
    end if;

    end;
    //

    oracle:
    procedure p_drop_table_if_exist_v2(p_table_name in varchar2)
    is
    v_table_name varchar2(20);
    begin
    select table_name into v_table_name from user_tables where table_name=upper(p_table_name);

    if length(v_table_name)>0 then
    execute immediate 'drop table ' || p_table_name || ' purge';
    end if;

    exception
    when no_data_found then
    begin
    null;
    end;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据
  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 Centos / PETGEM
  • ¥15 划分vlan后不通了