2016-05-12 101 views
-1

当前我正在将Sybase存储过程迁移到Oracle。一旦我在Oracle中迁移了SP并调试了SP,它就抛出了多个语法错误。将Sybase存储过程转换为Oracle时出现编译时错误

目前我被困在一个SP中,我有一种情况使用一个选择语句。

CREATE OR REPLACE PROCEDURE proc1 
(var1 IN VARCHAR2 DEFAULT NULL , 
    var2 IN NUMBER DEFAULT NULL) 
AS 
BEGIN 
    Select 
     (SELECT display_value 
       FROM table1) AS COLONE, 
      CASE a.someColumn 
       WHEN 0 THEN NULL 
      ELSE CAST(CAST(a.someColumnAS VARCHAR2(8)) AS DATE) 
       END someColumn, 
      (SELECT col1 
       FROM someTable 
       WHERE TabCod = 'STATUS' 
         AND LinCod = a.col) COLTWO, 
      (SELECT DESCRIPTION 
       FROM table 
       WHERE column = CAST(a.col AS NUMBER(18)) 
         AND inactive_dt IS NULL) ColThree, 
      (SELECT LinVal 
       FROM table 
       WHERE TabCod = 'EXTCOLTR' 
         AND LinCod = a.column) ColFour, 
      a.SeqIdentifier , 
      c.NAME 
     FROM FirstTable a, 
      SecondTable b, 
      ThirdTable c 
     WHERE a.CustAccount = var1 
       AND a.SeqIdentifier = var2 
       AND b.CustAccount = a.CustAccount 
       AND b.SeqIdentifier = a.SeqIdentifier 
       AND c.CustAccount = a.CustAccount 
       AND c.SeqIdentifier = a.SeqIdentifier 
     GROUP BY a.CustAccount,a.SeqIdentifier,a.Clo1,a.Col2,a.Col3,a.Col4,a.Col5,c.NAME; 
END proc1; 

我已经解决了,除了一个错误,是后BEGIN陆续因一个select语句几乎所有的错误。

如何解决此错误?

+0

您还没有包括你的错误。你在第一个'cast()'的'AS'之前缺少一个空格,开始时,你的两个参数都被称为'var1',但不知道编辑过程中会发生什么,以隐藏真实的表名等。错误堆栈通常指向错误所在的行和字符编号 - 它并不总是有帮助,但它是一个很好的起点。 –

+1

你必须选择你的查询INTO东西 – thatjeffsmith

+0

错误是错误(10,3):PL/SQL:SQL语句被忽略。 –

回答

0

下面是一些提示,请执行这些

SELECT (SELECT display_value 
      FROM table1) AS colone --remove that select from here 
     ,CASE a.somecolumn 
     WHEN 0 THEN 
      NULL 
     ELSE 
      CAST(CAST(a.somecolumnas VARCHAR2(8)) AS DATE) -- fix that CAST 
     END somecolumn 
     ,(SELECT col1 
      FROM sometable 
     WHERE tabcod = 'STATUS' 
      AND lincod = a.col) coltwo --remove that select from here 
     ,(SELECT description 
      FROM TABLE 
     WHERE column = CAST(a.col AS NUMBER(18)) 
      AND inactive_dt IS NULL) colthree --remove that select from here 
     ,(SELECT linval 
      FROM TABLE 
     WHERE tabcod = 'EXTCOLTR' 
      AND lincod = a.column) colfour --remove that select from here 
     ,a.seqidentifier 
     ,c.name 
    FROM firsttable a 
     ,secondtable b 
     ,thirdtable c 
     --make joins for "table1", "sometable" and "TABLE" 

WHERE a.custaccount = var1 
    AND a.seqidentifier = var2 
    AND b.custaccount = a.custaccount 
    AND b.seqidentifier = a.seqidentifier 
    AND c.custaccount = a.custaccount 
    AND c.seqidentifier = a.seqidentifier 
GROUP BY a.custaccount  --what is that group by here? 
     ,a.seqidentifier 
     ,a.clo1 
     ,a.col2 
     ,a.col3 
     ,a.col4 
     ,a.col5 
     ,c.name 
+0

Oracle预测中允许嵌套选择。所以不知道这些建议是多么有帮助。 – APC

+0

他们被允许,但我不认为他们被推荐...我从来没有见过一个开发人员使用,因为它是导致 - >“(SELECT display_value FROM table1)作为colone”我不认为是允许或有效的 – Thomas