【问题标题】:oracle verify insert then delete dynamic tablesoracle验证插入然后删除动态表
【发布时间】:2018-11-02 15:21:02
【问题描述】:

有什么方法可以验证我是否成功插入辅助表,然后在不使用触发器的情况下从原始表中删除这些行。

所以我有这个查询:有 2 个动态表 n_tab 和 n_tab2

testes:= 'INSERT all into ' || n_tab2 || ' SELECT * FROM ' || n_tab || ' where criado_em< ' || SYSDATE;
EXECUTE IMMEDIATE testes;

在此插入后,我想验证是否所有行都已插入,然后

stmt_del:= 'DELETE FROM ' || n_tab || ' WHERE EXISTS (SELECT 1
 FROM ' || n_tab2 || ' WHERE '  'need to find a way to associate the pk and fk dinamically'
EXECUTE IMMEDIATE testes;

提前谢谢你。

【问题讨论】:

  • 提示:试试returning into 子句。
  • 要使用返回我需要删除然后插入?我以前从未使用过它
  • 为什么不使用 SQL%ROWCOUNT SQL 属性来统计行数?
  • 我可以理解巴巴多斯的想法,如果我知道我将使用的所有列,但我不知道,所以我认为这行不通。 Ankit 你知道我可以看看的任何例子吗?
  • criado_em&lt;'|| SYSDATE 非常糟糕。使用criado_em &lt; :d'; EXECUTE IMMEDIATE testes USING SYSDATE;

标签: sql oracle plsql sql-insert sql-delete


【解决方案1】:

如果找不到任何方法,这里是使用 SQL%ROWCOUNT 的方法

DECLARE

stmt varchar2(100);
mycolumn NUMBER := 100 ;

BEGIN

stmt := 'insert into mytable values('||mycolumn||')';
execute immediate stmt;
dbms_output.put_line('value '||SQL%ROWCOUNT);

IF SQL%ROWCOUNT > 1 THEN

stmt_del:= 'delete from mytable where condition';
EXECUTE IMMEDIATE testes;
END IF;

END;

【讨论】:

  • 对不起,我看不出这对我有什么帮助。
  • 我看到一旦插入成功,您需要删除...此 SQL%ROWCOUNT 将根据插入次数给出值...那么我没有预料到
  • 所以我可以删除行数,以防我不抛出异常并回滚?到保存点? ,我想插入数据并删除,但我不想最终丢失它以防插入失败
  • 我没有得到你想要做什么......你可以用不同的场景进行测试,但要验证它是否以一种方式插入
  • 创建了一个新问题,试图更好地解释我假装stackoverflow.com/questions/53156179/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-14
  • 2018-05-20
相关资源
最近更新 更多