免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3913 | 回复: 13
打印 上一主题 下一主题

数据库存储过程脚本移植: oracle --> sybase,想用脚本完成,几个问题请教大虾 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-12 23:53 |只看该作者 |倒序浏览
本帖最后由 C307307 于 2011-08-13 00:13 编辑

question1:
范例:
-------------------------------------------
      gg
          abc:=cc
      abc:=cc
--------------------------------------------
如何变成如下:
------------------------------------------
      gg
          select @abc:=cc
      select @abc:=cc
------------------------------------------
要求在有含有":="的表达式前 加上 "select" 和 "@"
注意俄,不是简单的加上 "select" 和 "@",要保证修改后的代码和原来的
对齐格式是一样的。
比如:
______abc:=cc
要改成
______select @abc:=cc
原来前面又6个空格,修改后也是六个空格
不要修改成如下这样
select______@abc:=cc

question2:
范例:
---------------------------------------------------------------------------------------------
select aaa into vaaa from  ccc where aaa='ddd';
select aaa,bbb into vaaa,vbbb from ccc where ddd=eee;
---------------------------------------------------------------------------------------------
如何变成如下:
---------------------------------------------------------------------------------------------
select @vaaa=aaa from  ccc where aaa='ddd';
select @vaaa=aaa,@vbbb=bbb from ccc where ddd=eee;
---------------------------------------------------------------------------------------------

这个如何完成,希望大虾考虑下有的地方有空格,或又多个空格的问题。
另外如果一次有多个变量要赋值,不止上面写的一个或则两个,该如何来弄?
例如:
select a,b,c,e,f   into  va,vb,vc,vd,ve where 1=1;
改成:
select  @va=a,@vb=b,@vc=c,@vd=d,@ve=e  where 1=1;

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
2 [报告]
发表于 2011-08-13 00:04 |只看该作者
question1

  1. sed -r 's/([ |\t]*)([^:=]+:=.*)/\1select @\2/'
复制代码

论坛徽章:
0
3 [报告]
发表于 2011-08-13 00:09 |只看该作者
回复 2# liion631818


    谢楼上,测试了下,达到了目的。

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
4 [报告]
发表于 2011-08-13 00:28 |只看该作者
本帖最后由 liion631818 于 2011-08-13 00:35 编辑

  1. awk '{split($2, a, ",");split($4, b, ",");$2=$4="";for(i in a){line= line != "" ? line", @"b[i]"="a[i] : "@"b[i]"="a[i]}$3=line;NF+=1; line=""}1' file
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
5 [报告]
发表于 2011-08-13 00:58 |只看该作者
回复 1# C307307
  1. 1.awk '/:=/{sub(/ +/,"&select @")}1'

  2. 2.
  3. echo 'select a,b,c,e,f   into  va,vb,vc,vd,ve where 1=1;' |awk '{for(i=1;i<=NF;i++){if($i=="into"){for(j=1;j<=split($(i+1),b,",");j++){t=j==1?"@"b[j]"="b[j]:t",@"b[j]"="b[j]};$(i-1)=gensub("=v","=","g",t);$i=$(i+1)=""}}}1'
  4. select @va=a,@vb=b,@vc=c,@vd=d,@ve=e   where 1=1;

复制代码

论坛徽章:
0
6 [报告]
发表于 2011-08-13 01:42 |只看该作者
回复 4# liion631818


    谢谢解答,
    代码看得不是太懂,不过
   select a,b,c,e,f   into  va,vb,vc,vd,ve   where 1=1
   将上面以空格来分割是看懂了的,假如是下面这种情况就不能达到目的了。
select a ,   b ,   c ,   e ,   f   into  va ,   vb ,   vc ,   vd ,   ve   where 1=1

论坛徽章:
0
7 [报告]
发表于 2011-08-13 01:45 |只看该作者
回复 5# yinyuemi


    谢谢解答,question1是OK的,
   question2:
   应该和 4楼一样,是以空格来分割的,但如果是下面这种情况就达不到目的了。
   select a ,   b ,   c ,   e ,   f   into  va ,   vb ,   vc ,   vd ,   ve   where 1=1

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2011-08-13 01:48 |只看该作者
回复 7# C307307


    try:
  1. echo 'select a ,   b ,   c ,   e ,   f   into  va ,   vb ,   vc ,   vd ,   ve   where 1=1' |awk '{gsub(/ +, +/,",");$0=$0}{for(i=1;i<=NF;i++){if($i=="into"){for(j=1;j<=split($(i+1),b,",");j++){t=j==1?"@"b[j]"="b[j]:t",@"b[j]"="b[j]};$(i-1)=gensub("=v","=","g",t);$i=$(i+1)=""}}}1'
  2. select @va=a,@vb=b,@vc=c,@vd=d,@ve=e   where 1=1
复制代码

论坛徽章:
0
9 [报告]
发表于 2011-08-13 01:59 |只看该作者
回复 8# yinyuemi


    OK,感谢了!这回的代码是真的看不懂了。
    不过还有点小问题,就是对齐问题。
原来的代码:
_____________select 。。。。。。。。。
修改后的代码:
select 。。。。。。。。。
修改后的代码直接顶格了,原来前面的空格没了。

能否把这个问题解决下

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
10 [报告]
发表于 2011-08-13 02:07 |只看该作者
回复 9# C307307


    try:
  1. echo '        select a ,   b ,   c ,   e ,   f   into  va ,   vb ,   vc ,   vd ,   ve   where 1=1' |awk '{gsub(/ +, +/,",");$0=$0;y=gensub(/^( +)select.*/,"\\1",1,$0);}{for(i=1;i<=NF;i++){if($i=="into"){for(j=1;j<=split($(i+1),b,",");j++){t=j==1?"@"b[j]"="b[j]:t",@"b[j]"="b[j]};$(i-1)=gensub("=v","=","g",t);$i=$(i+1)=""}};$1=y$1}1'
  2.         select @va=a,@vb=b,@vc=c,@vd=d,@ve=e   where 1=1
复制代码


注,下次提问题的时候,尽量一次把需求都说出来,不然小心斑竹哥哥扣分分
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP