在一个SSH+SQL Server的项目中用sql-query的方式调用存储过程,如
<sql-query name="view_custinfo" callable="true">
<return class="fdm.pojos.CustInfo">
<return-property name="FIntelId" column="FIntelId"/>
<return-property name="FTYPE" column="FTYPE"/>
</return>
{call view_custinfo(:param1) }
</sql-query>
这样调用:
Query q = this.getSession().getNamedQuery("view_custinfo");
q.setParameter("param1", "cust");
List list = q.list();
存储过程只是一个简单的select:
ALTER PROCEDURE view_custinfo
@table varchar(12)
AS
Declare @SQL varchar(8000)
select @SQL='select * from '+@table
Exec(@SQL)
可是查询的时候会报错:
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 不允许对具有不止一条 SELECT 语句的远程存储过程或存储过程使用服务器游标。请使用默认结果集或客户端游标。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.IOBuffer.processPackets(Unknown Source)
几经折腾后,发现原来是这样的原因:我在applicationContext.xml中配置的url是“jdbc:sqlserver://localhost:1433;databaseName=DEMO;selectMethod=cursor”,去掉这个selectMethod=cursor就行了;而这个参数是之前为了提高SQL Server的查询性能才设置的,唉,只好去掉这个参数先。。。
分享到:
相关推荐
存储过程存储在数据库服务器上,可以通过客户端应用程序远程调用来执行。 #### 二、存储过程的优点 - **模块化**:存储过程可以将复杂的业务逻辑分解成多个独立的部分,每个部分负责执行特定的功能。 - **可重用性...
- **使用临时表取代一条一条插入**:当需要插入大量数据时,使用临时表可以显著提高插入速度。 - **循环次数很多时注意减少执行语句**:通过减少循环体内的SQL语句执行次数来提高程序性能。 - **看程序执行时间及...
- **查看各表对SP的影响(被哪些SP使用)**:通过检查存储过程的源代码或使用DBA工具来确定哪些表被特定的存储过程引用。 - **查看SP使用了哪些表**:同样地,可以通过检查存储过程的源代码来确定存储过程使用了哪些表...
- **使用临时表取代一条一条插入**:提高数据导入效率。 - **循环次数很多时注意减少执行语句**:避免不必要的重复执行。 - **看程序执行时间及结果DB2BATCH**:使用DB2BATCH工具监测执行时间。 - **看程序或语句...
- **给SELECT语句指定隔离级别**:使用`WITH RSNAPSHOT`或`WITH UR`等选项指定查询的隔离级别,例如: ```sql SELECT * FROM table WITH (UR); ``` - **ATOMIC及NOT ATOMIC区别**:`ATOMIC`表示存储过程作为一个...
##### 5.8 使用临时表取代一条一条插入 对于大量数据的插入操作,使用临时表可以提高效率。 ##### 5.9 循环次数很多时注意减少执行语句 减少循环中的执行语句数量可以减少不必要的资源消耗。 ##### 5.10 看程序...
4. **远程存储过程**:在远程服务器上执行的存储过程。 5. **扩展存储过程**:使用C/C++编写并通过DLL集成到SQL Server中的存储过程,可以执行复杂操作。 **触发器**: 1. **DML触发器**:当数据被插入、更新或删除...
8. **使用临时表取代一条一条插入:** 使用临时表可以批量处理数据,提高插入效率。 9. **循环次数很多时注意减少执行语句:** 减少循环体内的执行语句数量可以显著提高性能。 10. **看程序执行时间及结果DB2BATCH:*...
- **使用临时表取代一条一条插入**:当需要插入大量数据时,使用临时表进行批量插入可以大大提高性能。 - **循环次数很多时注意减少执行语句**:在循环体内减少不必要的SQL执行可以提高整体性能。 - **看程序执行...
根据给定文件的信息,本文将详细解析如何在不同的服务器之间同步数据库数据,主要涉及的关键步骤包括:创建数据库链接(DBLink)、使用同义词访问远程表、构建存储过程实现数据同步以及设置定时任务来定期执行数据...
- **10.5.3 游标变量**: 在存储过程中使用游标变量。 - **10.5.4 返回查询结果集**: 从存储过程中返回查询结果。 - **10.5.5 SQL语句应用举例**: 示例展示SQL语句的应用。 - **10.6 客户端存储模块**: 在客户端...
19. **给SELECT语句指定隔离级别:** 使用`WITH UR`或`WITH RS`来指定查询的隔离级别。 20. **ATOMIC及NOT ATOMIC区别:** `ATOMIC`表示整个事务要么全部提交要么全部回滚,而`NOT ATOMIC`则允许可串行化的事务。 ###...
- 这个存储过程定义了一个游标`cur_so`,用于从`ic_saleout_h`表中检索前100条记录,并输出这些记录的`vBillCode`和`dBillDate`值。 通过以上详细介绍,我们可以看到Oracle数据库中涉及的各种重要概念和技术,这些...
说明: 用于指定数据库为远程 PL/SQL 存储的过程处理被依赖对象的方式。如果设置为 TIMESTAMP, 只有在服务器与本地时间戳相匹配的情况下, 才能执行该过程。如果设置为 SIGNATURE, 在签名安全的情况下即可执行该过程。...
- **部署选项**:可以选择在本地或远程服务器上部署应用程序。 #### INFORMIX-4GL的处理逻辑 - **流程控制语句**: - 条件语句:IF-THEN-ELSE。 - 循环语句:DO-WHILE。 - 分支语句:CASE。 - **函数和过程**:...
这里,`fetchall()`方法会获取所有查询结果,然后遍历并打印每一条记录。 5. **关闭游标和连接**: 在操作完成后,记得关闭游标和连接以释放资源: ```python cursor.close() conn.close() ``` **高级特性**...
2. **主机名/IP地址**:数据库服务器的网络位置,可能是本地机器(localhost)或远程服务器的IP地址。 3. **端口号**:数据库服务监听的网络端口,如MySQL默认的3306。 4. **数据库名称**:你要连接的具体数据库实例...
- **描述**:返回当前连接上的任何打开游标发出的上一条游标 FETCH 语句的状态。 - **用途**:判断上一次游标操作是否成功。 #### 8. @@IDENTITY - **描述**:返回最后一次插入的标识值。 - **用途**:通常在插入...