我需要调用相同的xmls某些参数略有变化。我想写etl.properties,但后来我意识到我必须在中写属性文件名xml,这不是我想要的。
理想情况下,我正在寻找将参数传递给Scriptella使用命令行。显然我在任何文件中都找不到它。
有任何想法吗?
我在Scriptella中面临有关Oracle Sql查询的一个问题.
我的意图是 - 我必须从PRODUCT_PRICE表中获取从PRODUCT表中获取的每一行(使用where子句确定)的一些列数据,然后如果从PRODUCT_PRICE获取的数据不包含任何内容或为null,那么我必须为此插入新列对应于产品和商店ID的价格值进入表格,否则如果存在对应于产品和商店ID的行,那么我必须更新价格.
以下代码应该清除我所描述的逻辑 -
<query connection-id="db">
select PRODUCT_ID as "product_id1", STORE_ID as "store_id1" from PRODUCT
<query connection-id="db">
select REGULAR_PRICE, PRODUCT_ID as "product_id2", STORE_ID as "store_id2" from PRODUCT_PRICE where PRODUCT_ID=?product_id1 and STORE_ID=?store_id1
<script connection-id="db" if="rownum==0">
insert into PRODUCT_PRICE(REGULAR_PRICE, PRODUCT_ID, STORE_ID) values(?price, product_id1, store_id1)
</script>
<script connection-id="db" if="rownum gt 0">
update REGULAR_PRICE=?price where PRODUCT_ID=?product_id2 and STORE_ID=?store_id2
</script>
</query>
<query>
Run Code Online (Sandbox Code Playgroud)
我的问题是 - 这不起作用!如您所见,如果没有与产品和商店ID相对应的数据,我必须将product_id,store_id以及'price'插入到PRODUCT_PRICE表中.另外,如果存在一行相同的产品和store_id,我只需要更新价格.但是当在第二个查询中获取的结果集不包含任何内容时,条件为"rownum == 0"的脚本不起作用.那怎样才能在Oracle中实现这一目标?
在MySQL或SyBase数据库中,我知道有一种叫做"if exists(select ....)/ then then/else something"的语法,但我在Oracle数据库中找不到任何东西.如何根据Oracle数据库中的选择标准实现此条件插入或更新,因为我们的项目基于Oracle?
PS - 这里"price"变量已在第一个查询之前找到.我只放了代码的相关部分.
当我尝试INSERT记录时,我收到重复键错误,DB2 SQL错误:SQLCODE = -803,SQLSTATE = 23505.主键是一列,INTEGER 4,Generated,它是第一列.
插入看起来像这样:INSERT INTO SCHEMA.TABLE1值(DEFAULT,?,?,...)
我的理解是使用值DEFAULT只会让DB2在插入时自动生成密钥,这就是我想要的.这在大多数情况下有效,但有时/随机我得到重复键错误.思考?
更具体地说,我正在运行DB2 9.7.0.3,使用Scriptella将一堆记录从一个数据库复制到另一个数据库.有时我可以处理一堆没有问题,有时我会马上得到错误,其他时间在2条记录后,或20条记录,或30条记录等.似乎不是一个模式,也不是一样的每次记录.如果我将数据更改为复制1条记录而不是一堆,有时我会得到错误一次,那么下次就没问题了.
我想也许其他一些过程是在我的批处理程序中插入记录,并同时创建密钥.但是,我复制到的表不应该让任何其他用户/进程尝试在同一时间段内插入记录,尽管可能会发生READS.
编辑:添加创建信息:
Create table SCHEMA.TABLE1 (
SYSTEM_USER_KEY INTEGER NOT NULL
generated by default as identity (start with 1 increment by 1 cache 20),
COL2...,
)
alter table SCHEMA.TABLE1
add constraint SYSTEM_USER_SYSTEM_USER_KEY_IDX
Primary Key (SYSTEM_USER_KEY);
Run Code Online (Sandbox Code Playgroud)