1

我有一个名为SOURCE_TAG的表,我想在其中插入一个数据,其中所有插入语句仅在其中一列中有所不同(此列是名为SOURCE_LU的表中的主键 id )。但是,要获得列的 id,我还应该做一些工作。

以下列表包含stringKeys列表( SOURCE_LU中的一列)所以首先,我应该像下面的 Oracle SQL 中的伪代码一样思考

stringKeys= {"foo","bar","foobar","barfoo",...,"etc"}
for(each s in StringKeys) {

SELECT SOURCE_LU where stringKeys=s and Store the id in a list (lets say idList)

}

在获得 id 列表后,将每个 id 插入到 SOURCE_TAG 中,每行的其他类似数据

for (each id in listId ){
  INSERT INTO SOURCE_TAG values (x,y,id)

}

对不起,我是一个几乎没有 SQL 知识的 Java 人。那么在 Oracle SQL 中应该如何使用数组和循环呢?解决方案越简单越好。谢谢你。

4

1 回答 1

0

SQL 本身没有循环,但 Oracle 有一种称为 PL/SQL 的过程语言可供您使用。它有循环、条件、变量和其他你可能习惯的东西。

但是,我认为您要完成的工作可以在常规 SQL 中完成。请注意,我已经很多年没有使用过 Oracle 安装了,现在也无法访问,但是在 PostgreSQL 中,您可以执行以下操作:

INSERT INTO SOURCE_TAG
(YEAR_ID,SOURCE_TAG_LU_ID,PRIORITY_ORDER,STATUS_EN,SOURCE_LU_ID)
select 4 as year_id, 2 as source_tag, 1000 as priority_order, 'ACTIVE' as status_en, id
from source_lu
where stringkeys in ('foo', 'bar', ...)
group by year_id, source_tag, priority_order, status_en, id;

可能group by id在最后一行就足够了。

于 2012-04-27T20:06:24.403 回答