微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – Scriptella – 如何获取和重用自动生成的ID?

我正在使用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,true );

</script>

这显然是错误的,因为SELECT不能在脚本内部执行,对吧?我不确定如何在子查询中执行此操作.我正在使用Postgresql.

编辑:
我想要实现的是,例如,获取一个表的插入中使用的自动生成的id的值,以便在第二个表的插入中使用它,因为应该引用记录

解决方法

感谢Scriptella论坛的用户,这是一个解决方案,一个包含所有序列值的查询

<query connection-id="external">
    <query connection-id="sizoo">
        SELECT nextval('SQC_PHYLUM') AS phylumId,nextval('SQC_CLASE') AS claseId,nextval('SQC_ORDEN') AS ordenId,nextval('SQC_SUPERFAMILIA') AS superfamiliaId,nextval('SQC_FAMILIA') AS familiaId,nextval('SQC_GENERO') AS generoId,nextval('SQC_ESPECIE') AS especieId;

        <script connection-id="sizoo" if="rownum>1">
            INSERT INTO zoologia.phylum VALUES( ?phylumId,?phylum,true );
            INSERT INTO zoologia.clase VALUES( ?claseId,true );
            INSERT INTO zoologia.orden VALUES( ?ordenId,true );
            INSERT INTO zoologia.superfamilia VALUES( ?superfamiliaId,true );
            INSERT INTO zoologia.familia VALUES( ?familiaId,true );
            INSERT INTO zoologia.genero VALUES( ?generoId,true );
            INSERT INTO zoologia.especie VALUES( ?especieId,true );
        </script>
    </query>
</query>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐