从其他模式调用存储过程来创建表

Posted

技术标签:

【中文标题】从其他模式调用存储过程来创建表【英文标题】:Invoking stored procedure from other schema to create tables 【发布时间】:2014-01-23 09:46:06 【问题描述】:

我正在开发使用 java 开发的 Web 应用程序项目。在我的工作项目中, 我有这样的要求,比如我需要在用户注册后动态创建数据库。我已经这样做了。

但是,现在我想调用另一个模式(主数据库)中可用的一个存储过程。存储过程包含表。现在,我想在动态创建的数据库中调用该过程。

我写了如下代码,谁能帮我看看这段代码有什么问题,

Connection c1 = DriverManager.getConnection(URL, USER, PASSWORD);
java.sql.CallableStatement cstmt=null;
System.out.println("Invoking the stored procedure from subscription DB........");      
String callSP="call masterdb.createCorporateDBProc();";
cstmt= c1.prepareCall(callSP);
cstmt.execute();

java.sql.CallableStatement cstmt=null;
try 
    System.out.println("Invoking the stored procedure from subscription DB........");      
    String callSP="call subscription.createCorporateDBProc()";
    cstmt = c1.prepareCall(callSP);
    int r = cstmt.executeUpdate();
    System.out.println("SP created"+r);
    System.out.println("SP invoked and executed successfully in corporate DB....");
  catch(com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException e)
    e.printStackTrace();
    cstmt.close();
    c1.close();

【问题讨论】:

问题出在哪里?有什么例外? 我在创建存储过程时没有遇到任何异常...以下是日志供您参考新数据库 url:jdbc:mysql://localhost:3306/flkhlkfh [artifact:mvn] **** 已启动 **** [artifact:mvn] 从订阅 DB 调用存储过程........ [artifact:mvn] SP 在公司 DB 中成功调用并执行.... [artifact:mvn ] **** 结束 **** 还有什么问题?它执行吗?它有效吗?会挂吗?请说明您有问题的地方。 实际上,我编写的代码块正在调用创建的存储过程,没有任何异常和挂起问题。现在,我的问题是存储过程没有执行。我是否应该提供任何权限来访问其他模式存储过程、DDL 语句? 你的意思是java代码运行流畅但是masterdb.createCorporateDBProc()没有效果?你怎么知道它没有被执行?你能用一些日志更新这个过程吗?有提交吗? 【参考方案1】:

请参阅 javadoc 中的声明:

http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#executeUpdate%28java.lang.String%29

返回: (1) SQL 数据操作语言 (DML) 语句的行数或 (2) 0 用于不返回任何内容的 SQL 语句

这意味着执行过程将返回 0。如果调用成功,请检查您的数据库。

【讨论】:

以上是关于从其他模式调用存储过程来创建表的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 存储过程 - 创建游标后我可以清空临时表吗

从模式 A 中的存储过程调用模式 B 中的存储过程停止工作

从SQL代理作业调用时,工作存储过程失败

请教一个mysql 存储过程的问题?

基于列值从存储过程调用视图

MS SQL 和 Java:在调用存储过程期间找不到表变量