在插入脚本中提前替换

时间:2017-08-06 10:36:30

标签: sql oracle function replaceall

我有以下2个插入语句,我从开发环境从sql开发人员导出。我之后删除了dev中的那些记录。现在我想在dev中再次运行这个insert语句,因为那些是我的备份,但我收到错误,因为ORD_DAYID的虚拟列不能在插入脚本中使用。所以我想排除这个列以及使用替换功能或我不知道的任何工具的相应值。我以前不知道我有这个表的虚拟列。我想知道是否有任何工具或功能我可以选择ORD_DAYID并且相应的值被选中然后我可以删除它们然后我可以在测试环境中再次运行这个插入语句。

P.S我只提到了2个示例插入语句,但是有1000个插入语句。因此,很难从具有相应值的insert语句中手动删除此ORD_DAYID。

Insert into test_ord (IS_GRP,ORD_DAYID,REF_CAMPA_CODE) values (1,20150813,null);
Insert into test_ord (IS_GRP,ORD_DAYID,REF_CAMPA_CODE) values (1,20150828,null);

2 个答案:

答案 0 :(得分:1)

您可以使用正则表达式在Notepad ++等编辑器中编辑INSERT语句。

所以改变这个......

Insert into test_ord (IS_GRP,ORD_DAYID,REF_CAMPA_CODE) values (1,20150813,null);

......进入这个......

Insert into test_ord (IS_GRP,REF_CAMPA_CODE) values (1,null);

您需要搜索模式:

Insert into test_ord \(IS_GRP,ORD_DAYID,REF_CAMPA_CODE\) values \(([0-9]+),([0-9]+),null\);

替换模式:

Insert into test_ord \(IS_GRP,REF_CAMPA_CODE\) values \(\1,null\);

显然,您需要优化搜索模式,以满足1000条语句中IS_GRP和REF_CAMPA_CODE的所有不同值。

  

"有没有办法我们可以计算列和值的位置,并用null"

替换它

没有。虚拟列的障碍是它们无法在INSERT或UPDATE语句中引用。所以你需要完全将它从投影中排除。

  

"我无法在记事本++"

中找到这些选项

真的?搜索和替换不是一个奇特的选择:

  • 从菜单中Search > Find > Replace [tab](或[ctrl]+h
  • 作为搜索模式选择regular expression单选按钮

Notepad++ regex search'n'replace

答案 1 :(得分:0)

  1. 创建没有虚拟列的辅助表。
  2. 将数据恢复到此辅助表。
  3. 将数据从辅助表传输到原始表。
  4.     -- this is your table
        create table mytab(A number, b number, s as (a+b));
        --fill it with data
        insert into mytab(a,b) values(1,1);
        insert into mytab(a,b) values(1,2);
        insert into mytab(a,b) values(2,1);
        insert into mytab(a,b) values(2,2);
        commit;
        -- check its content
        select * from mytab;
        -- now delete the rows
        delete from mytab;
        commit;
    
        -- restore your data
        --------------------
    
        -- create a table similar the table you want to restore
        --   but the virtual colums as regular columns.
        create table ctas as 
            select * from mytab where 1!=0;
    
        -- insert your backup data
        insert into ctas(a,b,s) values(1,1,2);
        insert into ctas(a,b,s) values(1,2,3);
        insert into ctas(a,b,s) values(2,1,3);
        insert into ctas(a,b,s) values(2,2,4);
        commit;
    
        -- transfer the data to the table you want to restore
        insert into mytab(a,b) select a,b from ctas;