标签: scriptella

有什么方法可以将变量传递给 scriptella,例如环境或 -D 参数?

我需要调用相同的xmls某些参数略有变化。我想写etl.properties,但后来我意识到我必须在中写属性文件名xml,这不是我想要的。

理想情况下,我正在寻找将参数传递给Scriptella使用命令行。显然我在任何文件中都找不到它。

有任何想法吗?

scriptella

5
推荐指数
1
解决办法
1264
查看次数

Oracle SQL&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"变量已在第一个查询之前找到.我只放了代码的相关部分.

sql oracle scriptella

1
推荐指数
1
解决办法
1659
查看次数

使用INSERT DEFAULT时出现重复键错误

当我尝试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)

db2 scriptella

1
推荐指数
1
解决办法
4892
查看次数

标签 统计

scriptella ×3

db2 ×1

oracle ×1

sql ×1