- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在对 DB2 执行一个简单的存储过程调用。当它调用存储过程时,它总是返回此错误:
DB2 SQL Error: SQLCODE=-440, SQLSTATE=42884, SQLERRMC=MEDIAN_RESULT_SET;PROCEDURE, DRIVER=3.66.46
==========Java代码:
String JDBC_DRIVER = "com.ibm.db2.jcc.DB2Driver";
// STEP 2: Register JDBC driver
Class.forName(JDBC_DRIVER);
// STEP 3: Open a connection
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
// to execute the stored procedure.
System.out.println("CALL median_result_set(?)");
String sql = "CALL median_result_set(?)";
CallableStatement stmt1 = conn.prepareCall(sql);
stmt1.registerOutParameter(1, Types.DOUBLE);
stmt1.execute();
System.out.println("jdbcadapter->callproc after execute " + sql);
stmt1.close();
conn.close();
==============db2 clp 命令行有效:
c:SP>db2 call median_result_set(?)
Value of output parameters
--------------------------
Parameter Name : MEDIANSALARY
Parameter Value : +7.68582000000000E+004
Result set 1
--------------
NAME JOB SALARY
--------- ----- ---------
Marenghi Mgr 77506.75
O'Brien Sales 78006.00
================存储过程定义:
CREATE PROCEDURE median_result_set
-- Declare medianSalary as OUT so it can be used to return values
(OUT medianSalary DOUBLE)
RESULT SETS 2
LANGUAGE SQL
BEGIN
DECLARE v_numRecords INT DEFAULT 1;
DECLARE v_counter INT DEFAULT 0;
DECLARE c1 CURSOR FOR
SELECT salary FROM staff
ORDER BY CAST(salary AS DOUBLE);
-- use WITH RETURN in DECLARE CURSOR to return a result set
DECLARE c2 CURSOR WITH RETURN FOR
SELECT name, job, salary
FROM staff
WHERE CAST(salary AS DOUBLE) > medianSalary
ORDER BY salary;
-- use WITH RETURN in DECLARE CURSOR to return another result set
DECLARE c3 CURSOR WITH RETURN FOR
SELECT name, job, salary
FROM staff
WHERE CAST(salary AS DOUBLE) < medianSalary
ORDER BY SALARY DESC;
DECLARE CONTINUE HANDLER FOR NOT FOUND
SET medianSalary = 6666;
-- initialize OUT parameter
SET medianSalary = 0;
SELECT COUNT(*) INTO v_numRecords FROM STAFF;
OPEN c1;
WHILE v_counter < (v_numRecords / 2 + 1) DO
FETCH c1 INTO medianSalary;
SET v_counter = v_counter + 1;
END WHILE;
CLOSE c1;
-- return 1st result set, do not CLOSE cursor
OPEN c2;
-- return 2nd result set, do not CLOSE cursor
OPEN c3;
END @
最佳答案
基本上“SQLCODE=-440, SQLSTATE=42884”就是找不到存储过程。
我看到一个很常见的原因是参数不匹配。
对于我的情况,我注意到在 java 代码中,我必须将模式名称放在存储过程名称的前面,例如,我应该做 SCHEMANAME.median_result_set(?) 而不是 median_result_set(?)
可以使用一些数据库管理工具找到此 SP 的 SCHEMANAME。
我不需要从命令行指定模式名称的原因:似乎当我从创建该 SP 时使用同一用户从 CLP 命令行调用 SP 时,不需要模式名称(因为它们在内部匹配)。当然,如果在命令行指定schema 总是对的。我观察到 DB2 在内部使用用户名作为模式名称。例如,如果“ADMINISTRATOR”创建了一个 SP,字符串“ADMINISTRATOR”就是它的模式名称,只要我在 Windows 上看到。
关于java - DB2 java 存储过程调用返回错误 SQLCODE=-440, SQLSTATE=42884,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18367803/
CREATE DATABASE test.fdb -user ZZZZZ -password *******; 我正在使用上面的命令在 Windows 7 中为我的项目创建一个数据库。我是 Fireb
我需要运行一个报告,给出每个月具有特定创建者的记录数。对于每个月,我的查询不止一次显示该月。难道是我做错了什么:我的脚本: Select DATEPART(mm,DatePrinted),COUNT(
我有一个存储过程,将代码保存在 varchar 变量中,我需要执行此代码。 程序: delimiter $$ create procedure eixos_caminhao (in numeroE
当我从输入中为时间戳字段提供 0001-01-01 00:00:00.000000 时,我得到“日期时间值的字符串表示不是有效的日期时间值”。但是,当我将 0001 更改为 0002 作为输入的时间戳
当我尝试使用 LISTAGG 时出现此错误 未找到具有兼容参数的类型为“FUNCTION”的名为“LISTAGG”的授权例程。SQLCODE=-440,SQLSTATE=42884,DRIVER=3.
我有一个 Oracle 过程,它在 EXCEPTION 部分使用 PL/SQL SQLCODE 函数。现在我需要用 Java 翻译该过程。我找到了 SQLException.getErrorCode
当我将数据插入表(db2)时,我收到此错误: Message: Operation not allowed for reason code "7" on table "ELSAG.ICGR1106".
我已经在 DB2 中尝试了一个巨大的插入查询。INSERT INTO MY_TABLE_COPY (SELECT * FROM MY_TABLE); 在此之前,我设置了以下内容: UPDATE DAT
目前我遇到一个问题,在 node-jdbc 中使用准备好的语句执行查询/插入时,有时会出现错误: DB2 SQL Error: SQLCODE=-313, SQLSTATE=07004 在 IBM 网
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
尝试在 DB2 中创建存储过程时出现以下错误 Error report: DB2 SQL error: SQLCODE: -138, SQLSTATE: 22011, SQLERRMC: null 我
来自 Powerbuilder 并转向 PHP/MySQL。我们经常使用SQLCA.SQLCODE来检查我们的SQL语句是否成功。 MySQL 有类似的东西吗? IF SQLCA.SQLCODE =
在甲骨文中, WHEN OTHERS THEN IF SQLCODE = -31011 THEN 如何转换上面的内容 IF SQLCODE = -31011 THEN 到 Postgres,因为
我的代码中有一系列插入语句。该表几乎没有触发器来更新上次更新的日期和时间。 某些插入成功,而其他类似的插入到表中失败,出现 DB2 SQL 错误:SQLCODE=-723,SQLSTATE=09000
在尝试连接到数据库时,我收到一个奇怪的错误: DatabaseError: SQLCODE -1829 in CONNECT: ì¦à : Cannot open file 'os.iem' Ã
[运行DB2 UDB版本9]为什么此SQL语句起作用 SELECT CASE WHEN A.DAILYDOWNLOADSIZE is null THEN 0 els
关闭。这个问题需要details or clarity .它目前不接受答案。 想改善这个问题吗?通过 editing this post 添加详细信息并澄清问题. 7年前关闭。 Improve thi
我正在尝试更新表,但它不起作用并给出此 sql 错误。 //Updating Buy Table Integer stkbid = Integer.parseInt(request.getParame
我有一个返回 OUT 参数的过程。 procedure foo (in_v IN INTEGER, out_v OUT integer) BEGIN ... EXCEPTION WHEN OTHE
我正在读取 Oracle 中的一个表并将整个转储插入到 Db2 中。表结构相同。我正在使用执行上述任务的简单 scala 类。我已将 insert batchsize 设置为 300。更新几批后,该类
我是一名优秀的程序员,十分优秀!