如果您使用序列,那么第一次执行查询时,您将生成值;那么下次执行查询时,您将不会获得相同的值,但会获得序列中的下一个值。这可能不是你所追求的。
甲骨文设置:
CREATE TABLE camion ( nro_patente, valor_arriendo_dia, valor_garantia_dia ) AS
SELECT 1, 1, 1 FROM DUAL;
CREATE TABLE arriendo_camion ( id_arriendo, nro_patente, fecha_ini_arriendo ) AS
SELECT 1, 1, SYSDATE FROM DUAL;
CREATE SEQUENCE SEQ_ARRIENDO;
使用序列查询:
SELECT SEQ_ARRIENDO.NEXTVAL,
t.*
FROM (
SELECT TO_CHAR(SYSDATE,'YYYY') ANNO_PROCESO,
cam.nro_patente,
( SELECT COUNT(ac.id_arriendo)
FROM arriendo_camion ac
where cam.nro_patente = ac.nro_patente
and TO_CHAR(ac.fecha_ini_arriendo,'YYYY') = TO_CHAR(SYSDATE,'YYYY')
having count(ac.id_arriendo) < 4
) "Arriendos"
FROM camion CAM
GROUP BY cam.nro_patente,
cam.valor_arriendo_dia,
cam.valor_garantia_dia
order by cam.nro_patente
) t
where "Arriendos" is not null;
输出:
第一次运行查询时,您将获得:
行号 | ANNO_PROCESO | NRO_专利 | 阿里恩多斯
-----: | :----------- | ----------: | --------:
1 | 2019 | 1 | 1
第二次运行相同的查询时,您将获得:
下一个 | ANNO_PROCESO | NRO_专利 | 阿里恩多斯
------: | :----------- | ----------: | --------:
2 | 2019 | 1 | 1
并且序号会从前一个的增量开始不断上升NEXTVAL
。
查询ROWNUM
:
假设您只想要一个从 1 开始的递增整数值,然后订购您的查询,然后使用ROWNUM
:
SELECT ROWNUM,
t.*
FROM (
SELECT TO_CHAR(SYSDATE,'YYYY') ANNO_PROCESO,
cam.nro_patente,
( SELECT COUNT(ac.id_arriendo)
FROM arriendo_camion ac
where cam.nro_patente = ac.nro_patente
and TO_CHAR(ac.fecha_ini_arriendo,'YYYY') = TO_CHAR(SYSDATE,'YYYY')
having count(ac.id_arriendo) < 4
) "Arriendos"
FROM camion CAM
GROUP BY cam.nro_patente,
cam.valor_arriendo_dia,
cam.valor_garantia_dia
order by cam.nro_patente
) t
where "Arriendos" is not null;
输出:
这将始终从 1 开始“序列”:
行号 | ANNO_PROCESO | NRO_专利 | 阿里恩多斯
-----: | :----------- | ----------: | --------:
1 | 2019 | 1 | 1
db<>在这里摆弄