oracle创建表报错,java 调用oracle存储过程建表报错,求解

java 调用oracle存储过程建表出错,求解

oracle建的创建建表的存储过程其中有外键约束, 在sqlplusw中调用没有问题,外键约束可以建出来,但是在java中调用创建的表就没有外键约束 ,报的错误:

ORA-00955: 名称已由现有对象使用

ORA-06512: 在 "SCOTT.BUILDDATA", line 19

ORA-06512: 在 line 1

数据库中没有这两个表,已经删掉后的。

先贴过程

CREATE OR REPLACE

procedure builddata1 is

v_comsql VARCHAR2(2000);

v_myusersql VARCHAR2(2000);

v_comcount number(30);

v_usercount number(30);

begin

v_comsql:='

create table com(

com_name varchar2(20) not null unique,

com_order varchar2(20) primary key ,

bcom_order varchar2(20) not null unique,

com_ispare char(2) not null)';

v_myusersql:='create table myuser(

user_id char(32) primary key,

user_name varchar2(20) not null unique,

user_password varchar2(20) not null,

user_ispare char(2) not null,

branch_order varchar2(20) REFERENCES com(com_order)

)';

select count(*) into v_comcount from user_tables where table_name='COM';

if v_comcount=0 then

execute immediate v_comsql;

else

dbms_output.put_line('com表存在');

end if;

select count(*) into v_usercount from user_tables where table_name='MYUSER';

if v_usercount=0 then

execute immediate v_myusersql;

else

dbms_output.put_line('myuser表存在');

end if;

exception

when others then

dbms_output.put_line('创建表异常');

end builddata1;

再贴java代码:

package com.manage.session;

import org.hibernate.Query;

import org.hibernate.Session;

public class InstallDb {

private Session session;

public boolean installDb(){

boolean i=false;

try{

session=HibernateSessionFactory.getSession();

session.beginTransaction();

Query query=session.createSQLQuery("{call builddata()}");

query.executeUpdate();

session.getTransaction().commit();

i=true;

}catch(Exception e){

session.getTransaction().rollback();

e.printStackTrace();

}finally{

HibernateSessionFactory.closeSession();

}

return i;

}

}

------解决方案--------------------

在scott用户下执行以下SQL看是否有该对象:

SELECT * FROM tab;

------解决方案--------------------

会不会是其他的,不是table,查一下all_objects

------解决方案--------------------

如果方便的话,直接用jdbc试试,怀疑hibernate转换了

------解决方案--------------------

如果能直接建表的话,就直接建表;不要在存储过程中建,这样的话将来程序的并发性也不好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值