永发信息网

在ORACLE中,如何找到任意SQL字符串中的表,并将表进行指定规则的替换,比如在表名后加DBLINK

答案:2  悬赏:0  手机版
解决时间 2021-01-27 07:31
  • 提问者网友:蓝琪梦莎
  • 2021-01-27 03:12
在A数据库可以执行一段SQL
SELECt QW,QE,QR FROM Q WHERe Q=1;
或者
SELECt QW,COUNT(1) FROM (SELECt QW,QE,QR FROM Q WHERe Q=1 ) GROUP BY QW;
SELECt QW,COUNT(1) FROM EW,(SELECt QW,QE,QR FROM Q WHERe Q=1 ) WHERe EW=QW GROUP BY QW;
在B数据库有A数据库的DBLINK,如果要在B库执行以上语句,则需要在每张表后面加上 @B,
现在问题是,如果提供的SQL是动态的,那么在B库执行时,每次都要人为的识别表再在后面加上 @B,
在ORACLE中,如何实现这个SQL文本的通用转换?
"FROM" 后的非空格的第一个字符不是符号时可以将从这个字符开始到下一个逗号、括号或空格的截止的字符串识别为表
”WHERe“ 不是表
就想到以上两点,也不知道在ORACLE中该怎么写这些逻辑。。。请大神帮忙
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-01-27 03:17
动态SQL 实质就是执行的SQL字符串,所以你完全可以用拼接的方式,先把 字符串 拼接出来,然后用execute immediate 'sql' 来执行;

至于如果拼接出来 SQL,那就需要你去找规律,其实你可以对字符串做对此拼接,例如一下:str1 :='SELECt QW,QE,QR FROM Q WHERe Q=1';
str2 :='SELECt QW,COUNT(1) FROM EW,' || str1 || 'WHERe EW=QW GROUP BY QW;'

这类问题 完全属于个别案例,因为SQL的规律只有你自己最清楚,谁都无法提供一个完整的解决方案!
全部回答
  • 1楼网友:狂恋
  • 2021-01-27 04:48
会不会是大小写的问题,或者关键字的问题 你到sqlserver中查查,这个表的定义的语法情况。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯