我有下面的DB对象和Java程序,当我尝试从Java调用Oracle的存储过程时,我无法得到临时表count.Am缺少一些东西,但我不知道wrong.Please帮助我找到错误code.When我调用的过程使用oracle语句直接在oracleSQL开发人员能够得到临时table.After每次调用插入过程它插入计数,并正确地在Oracle语句调用和Java.But当我尝试使用JDBC时,只有插入过程返回计数,但得到临时表计数缺少计数,并返回零而不是一。
温度表 :
CREATE GLOBAL TEMPORARY TABLE TABLE1_TMP(NAME VARCHAR2(10)) ON COMMIT DELETE ROWS;
程序:
CREATE OR REPLACE PROCEDURE INSERT_TABLE1_TMP(IN_NAME IN VARCHAR2,TEMP_COUNT OUT NUMBER)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('IN_NAME:'||IN_NAME);
INSERT INTO TABLE1_TMP VALUES(IN_NAME);
SELECT COUNT(*) INTO TEMP_COUNT FROM TABLE1_TMP;
END INSERT_TABLE1_TMP;
CREATE OR REPLACE PROCEDURE GETCNT_TABLE1_TMP(TEMP_COUNT OUT NUMBER)
IS
BEGIN
SELECT COUNT(*) INTO TEMP_COUNT FROM TABLE1_TMP;
DBMS_OUTPUT.PUT_LINE('COUNT:'||TEMP_COUNT);
END GETCNT_TABLE1_TMP;
执行:
DECLARE
IN_NAME VARCHAR2(200);
TEMP_COUNT NUMBER;
BEGIN
IN_NAME := 'name1';
INSERT_TABLE1_TMP(
IN_NAME => IN_NAME,
TEMP_COUNT => TEMP_COUNT
);
DBMS_OUTPUT.PUT_LINE('insert TEMP_COUNT1 = ' || TEMP_COUNT);
GETCNT_TABLE1_TMP(
TEMP_COUNT => TEMP_COUNT
);
DBMS_OUTPUT.PUT_LINE('TEMP_COUNT2 = ' || TEMP_COUNT);
END;
输出:
IN_NAME:name1
insert TEMP_COUNT1 = 1
COUNT:1
TEMP_COUNT2 = 1
Java方案:
Connection dbConnection = null;
CallableStatement callableStatement = null;
CallableStatement callableStatement1 = null;
try {
dbConnection = getDBConnection();
callableStatement = dbConnection.prepareCall("{call insert_table1_tmp(?,?)}");
callableStatement.setString(1, "name1");
callableStatement.registerOutParameter(2, OracleTypes.NUMBER);
callableStatement.executeUpdate();
System.out.println("Insert into temp table count :"+callableStatement.getInt(2));
callableStatement1 = dbConnection.prepareCall("{call getCnt_table1_tmp(?)}");
callableStatement1.registerOutParameter(1, OracleTypes.NUMBER);
callableStatement1.execute();
System.out.println("Temp table count :"+callableStatement1.getInt(1));
} catch (SQLException e) {
System.out.println(e.getMessage());
} finally {
if (callableStatement != null) {
callableStatement.close();
}
if (callableStatement1 != null) {
callableStatement1.close();
}
if (dbConnection != null) {
dbConnection.commit();
dbConnection.close();
}
}
Java输出:
Insert into temp table count :1
Temp table count :0
CREATE GLOBAL TEMPORARY TABLE TABLE1_TMP(NAME VARCHAR2(10)) ON COMMIT DELETE ROWS;
根据我们的讨论,临时表在提交时删除行。如果JDBC驱动程序autocommit设置为true,那么稍后查询表时将没有行。
问题内容: 在Oracle中,您可以使用以下方式创建临时表: …这可能很漂亮,因为这会创建一个所有人都可以看到的表,但是一个INSERT插入表中的数据仅对他或她可见。此外,该数据将在事务或会话结束时自动删除(取决于其声明),从而使其他所有人的临时数据不受损害。 但是,在SQL Server中,可以使用以下方式创建临时表: …据我所知,它在功能和功能上与Oracle的实现有本质的不同。该临时表仅对您
如果尝试执行上述查询,则会出现错误 原因:错误:933,位置:36,Sql=插入St(id)值('ADMIN');select*from Student where id in(select id from St);,OriginalSql=INSERT INTO St(id)values(“admin”);select*from Student where id in(select id fro
本文向大家介绍对比Oracle临时表和SQL Server临时表的不同点,包括了对比Oracle临时表和SQL Server临时表的不同点的使用技巧和注意事项,需要的朋友参考一下 Oracle数据库创建临时表的过程以及和SQL Server临时表的不同点的对比的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解一下这部分内容吧,希望能够对您有所帮助。 1.简介 Oracle数据库除了可以
在Oracle中,需要在存储过程中多次重用查询结果。想知道临时表是推荐的方式还是其他方式... 首先,我基于某些输入参数创建一个结果集。 然后做一些检查,看看是否有任何结果集行出现在表1中。简单的连接和计数就足够了。如果算 为了获得最佳性能,应该使用临时表还是其他表? 谢谢
“stack_trace”:“org.springframework.jdbc.uncategorizedsqlexception:CallableStatementCallback;SQL[{call post_cycle_tfo_stat_pkg.insert_cycle_status(?,?,?,?)}]得SQLException未分类;SQL状态[99999];错误代码[17004];无效
本文向大家介绍oracle 临时表详解及实例,包括了oracle 临时表详解及实例的使用技巧和注意事项,需要的朋友参考一下 在Oracle8i或以上版本中,可以创建以下两种临时表: 1。会话特有的临时表 CREATE GLOBAL TEMPORARY <TABLE_NAME> ( <column specification> ) ON COMMIT PRESERVE ROWS; 2。事务特有的临