SQL中的循环和数组

时间:2012-04-27 20:00:40

标签: sql oracle

我有一个名为 SOURCE_TAG 的表,我想在其中插入一个数据,其中所有insert语句只在其中一列中有所不同(此列是名为 SOURCE_LU )。但是,要获得列的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中使用Arrays和循环呢?解决方案越简单越好。谢谢。

1 个答案:

答案 0 :(得分: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可能就足够了。