Есть ли способ конвертировать скрипт SQL Server в скрипт Oracle - PullRequest
0 голосов
/ 14 июня 2019

Я хочу запустить этот SQL-скрипт в Oracle. Я пытался использовать конвертер сценариев MSSQL. И это были результаты, но не работает.

Update c
SET `c.SOURCE BLOCK LEVEL` = CONCAT('B',SUBSTR(g.HIERARCHY, GREATEST(-LENGTH(g.HIERARCHY),-LENGTH(RTRIM(g.HIERARCHY)) - 12)))
FROM mshist>dbo<CYCLE AS c
INNER JOIN `msmodel.dbo.GRADEBLOCK` AS g
ON `c.SOURCE BLOCK` IS NOT NULL AND
`c.SOURCE BLOCK LEVEL` IS NULL AND 
g.HIERARCHY LIKE 'root:Blocks:%' AND
`c.SOURCE BLOCK` = g.GRADEBLOCK_OID;


UPDATE C
SET `c.SOURCE BLOCK LEVEL` = CONCAT('S',SUBSTR(g.HIERARCHY, GREATEST(-LENGTH(g.HIERARCHY),-LENGTH(RTRIM(g.HIERARCHY)) - 16)))
FROM mshist.dbo AS c
INNER JOIN msmodel.dbo.GRADEBLOCK AS g
ON `c.SOURCE BLOCK` IS NOT NULL AND
`c.SOURCE BLOCK LEVEL` IS NULL AND
g.HIERARCHY LIKE 'root:Stockpiles:%' AND
`c.SOURCE BLOCK` = g.GRADEBLOCK_OID;

1 Ответ

0 голосов
/ 15 июня 2019

справа;полученный вами код не будет работать в Oracle, но что-то вроде этого может быть:

update cycle c set
  c.source block level = 
   (select concat('B', substr(g.hierarchy, 
                              greatest(-length(g.hierarchy), -length(rtrim(g.hierarchy)) - 12)
                             )
                 )
    from gradeblock g
    where c.source block = g.gradeblock_oid
      and g.hierarchy like 'root:Blocks:%'
   )
where c.source block is not null
  and c.source block level is null;
  • вам может потребоваться настроить имена таблиц (в UPDATE и FROM)
  • стартовая позиция подстроки выглядит подозрительно;похоже, что это отрицательное число.Это?Если это так, то это не ошибка - это просто означает, что будет отсчитываться в обратном направлении от конца строки g.hierarchy

Посмотрите, поможет ли это.

...