在同一个select语句中递增序列 [英] Incrementing sequences in the same select statement
问题描述
问题是当在同一个
select语句中多次使用AddID时,它会在所有位置返回相同的值。我怎么能用
强制函数AddID来增加OBJECTID序列?
这是一个基本的使用示例:
SELECT AddID( ),来自table1的AddID(),AddID(),column1
这是AddID的样子:
CREATE FUNCTION Admin.AddID()
返回INTEGER
F1:开始原子
DECLARE I INTEGER;
SET I =(对象的下一个值);
返回I;
结束
The problem is that when AddID is used multiple times in the same
select statement, it returns the same value in all places. How could I
force function AddID to increment OBJECTID sequence?
Here is a basic sample of usage:
SELECT AddID(), AddID(), AddID(), column1 from table1
Here is how AddID looks like:
CREATE FUNCTION Admin.AddID()
RETURNS INTEGER
F1: BEGIN ATOMIC
DECLARE I INTEGER;
SET I = (NEXT VALUE FOR OBJECTID);
RETURN I;
END
推荐答案
Les's假设,在同一个select中对AddID()的多次调用是增加序列的
。接下来的问题是:生成了什么
(提示:递增的顺序)?
您可以递增序列并将生成的值分配给变量
顺序在选择之外。
但是,你真正的(商业)需要什么呢?
- - Artur Wronski
Les''s assume, that multiple call to AddID() within the same select is
incrementing the sequence. The next question is: what was generated
(hint: the order of incrementing)?
You can increment the sequence and assign generated values to variables
sequentially outside of the select.
But, what is your real (business) need for that?
-- Artur Wronski
我需要在select语句中显示增量值。
select语句增量和变量赋值之外
对我来说不是一个选项。
I need incremented values to be displayed inside select statement.
Outside of select statement incrementation and assignment to variables
is not an option for me.
Antanas写道:
Antanas wrote:
问题是,当在同一个
select语句中多次使用AddID时,它会在所有位置返回相同的值。我怎么能强制函数AddID来增加OBJECTID序列?
这是一个基本的使用示例:
SELECT AddID(),AddID(),AddID(),column1来自table1
以下是AddID的样子:
CREATE FUNCTION Admin.AddID()
返回INTEGER
F1:开始原子
DECLARE I INTEGER;
SET I =(对象的下一个值);
返回我;
结束
The problem is that when AddID is used multiple times in the same
select statement, it returns the same value in all places. How could I
force function AddID to increment OBJECTID sequence?
Here is a basic sample of usage:
SELECT AddID(), AddID(), AddID(), column1 from table1
Here is how AddID looks like:
CREATE FUNCTION Admin.AddID()
RETURNS INTEGER
F1: BEGIN ATOMIC
DECLARE I INTEGER;
SET I = (NEXT VALUE FOR OBJECTID);
RETURN I;
END
我已在其他新闻组你可以使用外部
功能。以下是我刚才编写的代码来验证这一点:
-------------------------- -------------------------------------
import java.sql。 *;
公共类测试扩展COM.ibm.db2.app.UDF {
public void getNextSequenceId(int value)抛出异常{
连接con = getConnection();
语句stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(" VALUES NEXT VALUE FOR seq" ;);
while(rs.next()){
value = rs.getInt(1);
}
rs.close();
stmt.close();
set(1,value);
}
}
----------------------------------- ----------------------------
CREATE SEQUENCE seq @
CREATE FUNCTION getNextSeqValue()
RETURNS INTEGER
EXTERNAL NAME''Test.getNextSequenceId''
LANGUAGE JAVA
PARAMETER STYLE DB2GENERAL
NOT DETERMINISTIC
无外接行动
读取SQL数据
允许并行@
------------- --------------------------------------------------
I already said in the other news group that you could use an external
function. And here is the code I just wrote to verify this:
---------------------------------------------------------------
import java.sql.*;
public class Test extends COM.ibm.db2.app.UDF {
public void getNextSequenceId(int value) throws Exception {
Connection con = getConnection();
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("VALUES NEXT VALUE FOR seq");
while (rs.next()) {
value = rs.getInt(1);
}
rs.close();
stmt.close();
set(1, value);
}
}
---------------------------------------------------------------
CREATE SEQUENCE seq@
CREATE FUNCTION getNextSeqValue()
RETURNS INTEGER
EXTERNAL NAME ''Test.getNextSequenceId''
LANGUAGE JAVA
PARAMETER STYLE DB2GENERAL
NOT DETERMINISTIC
NO EXTERNAL ACTION
READS SQL DATA
ALLOW PARALLEL@
---------------------------------------------------------------
这篇关于在同一个select语句中递增序列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!