gpt4 book ai didi

java - 在informix中创建存储过程

转载 作者:行者123 更新时间:2023-12-01 05:19:33 24 4
gpt4 key购买 nike

我正在尝试创建新的存储过程。下面是 sp 的代码段。

CREATE PROCEDURE abs_eq (arg1 INTEGER, arg2 INTEGER)
RETURNS BOOLEAN
WITH (NOT VARIANT)
DEFINE ret BOOLEAN;
IF (arg1 < 0 THEN)
LET arg1 = -arg1;
END IF
IF(arg1 = arg2) THEN
LET ret = "t";
ELSE
LET ret = "f";
END IF;
RETURN ret;
END PROCEDURE;
EXECUTE PROCEDURE abs_eq (3, 5);

但是,我不知道该代码段放在哪里以及如何在远程数据库进行编译。我将在 java 中这样调用这个函数:

public void callfunction() throws SQLException {

CallableStatement proc = null;

proc = conn.prepareCall("{ call abs_eq(?,?) }");
proc.setInt(1, 3);
proc.setInt(2, 5);
boolean result = proc.execute();
System.out.println(result);

}

我需要一个清晰的解释来描述我需要一步一步做什么

最佳答案

您可以使用任何可以运行 sql 语句的工具将其“放入”数据库。这可以通过 ISA(Informix Server Administrator)或使用 ODBC 或 JDBC 驱动程序的 SQL 编辑器来完成。当然,您可以使用 JDBC 来完成此任务:

stmt = conn.createStatement()
stmt.execute(FUN_BODY)

我将它与 Informix JDBC 驱动程序和 Jython 一起使用(因此,行尾没有分号)。

您的程序存在一些错误。它应该是函数,如果我理解它的名字,它应该使用两个整数的绝对值进行比较。我会这样写:

FUN_BODY = """CREATE FUNCTION abs_eq (arg1 INTEGER, arg2 INTEGER) RETURNING BOOLEAN;
IF (arg1 == arg2) THEN
RETURN 't';
END IF;
IF (arg1 == -arg2) THEN
RETURN 't';
END IF;
IF (-arg1 == arg2) THEN
RETURN 't';
END IF;
RETURN 'f';
END FUNCTION;
"""

我还会添加一些测试,有带有测试例程和测试的 Jython 代码:

def test_abs_eq(proc, arg1, arg2, expected):
proc.setInt(1, arg1);
proc.setInt(2, arg2);
rs = proc.executeQuery();
while (rs.next()):
r = rs.getBoolean(1)
ok = 'ok'
if r != expected:
ok = ' ERROR!!!'
print('%d, %d: %s %s' % (arg1, arg2, r, ok))


def test_multi(db_url, usr, passwd):
try:
db = DriverManager.getConnection(db_url, usr, passwd)
conn = db.createStatement()
conn.execute(FUN_BODY)
proc = db.prepareCall("{ call abs_eq(?,?) }");
test_abs_eq(proc, 0, 0, True)
test_abs_eq(proc, 3, 4, False)
test_abs_eq(proc, 3, 3, True)
test_abs_eq(proc, 20, 0, False)
test_abs_eq(proc, -20, -20, True)
test_abs_eq(proc, 20, -20, True)
test_abs_eq(proc, -20, 20, True)
test_abs_eq(proc, 20, 20, True)
db.close()
except:
print("there were errors!")
s = traceback.format_exc()
sys.stderr.write("%s\n" % (s))

关于java - 在informix中创建存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10637203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com