【发布时间】:2012-10-09 20:43:59
【问题描述】:
我正在使用 Scriptella 进行 ETL 操作,使用自动生成的 ID 引用的许多表。我想在不使用子查询的情况下重复使用这些 id,这是我的 etl 文件的脚本片段:
<script connection-id="out" if="rownum>1">
SELECT nextval('SQC_CLASE') AS claseId;
INSERT INTO zoologia.clase VALUES( ?claseId, ?phylumId, ?clase, ?subclase, ?infraclase, true );
SELECT nextval('SQC_ORDEN') AS ordenId;
INSERT INTO zoologia.orden VALUES( ?ordenId, ?claseId, ?orden, ?suborden, true );
SELECT nextval('SQC_SUPERFAMILIA') AS superfamiliaId;
INSERT INTO zoologia.superfamilia VALUES( ?superfamiliaId, ?ordenId, ?superfamilia, true );
SELECT nextval('SQC_FAMILIA') AS familiaId;
INSERT INTO zoologia.familia VALUES( ?familiaId, ?superfamiliaId, ?familia, ?subfamilia, ?tribu, true );
SELECT nextval('SQC_GENERO') AS generoId;
INSERT INTO zoologia.genero VALUES( ?generoId, ?familiaId, ?genero, true );
SELECT nextval('SQC_ESPECIE') AS especieId;
INSERT INTO zoologia.especie VALUES( ?especieId, ?generoId, ?especie, ?subespecie, ?variedad, ?genero, true );
</script>
这显然是错误的,因为SELECT 不能在脚本中执行,对吧?我不确定如何在没有子查询的情况下做到这一点。我正在使用 PostgreSQL。
编辑: 我想要实现的是,例如,获取在第一个表的插入中使用的自动生成 id 的值,以便在第二个表的插入中使用它,因为应该引用记录
【问题讨论】:
-
为什么您要为已删除的项目重复使用 ID?
-
... 为什么不使用子查询呢?你说的是“不使用子查询”,但不是为什么。
标签: postgresql scriptella