在同一个select语句中递增序列 [英] Incrementing sequences in the same select statement

查看:81
本文介绍了在同一个select语句中递增序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问题是当在同一个

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆