ORA-00933:SQL命令未正确结束ORA-06512:

时间:2014-06-22 00:32:25

标签: sql oracle sql-server-2008 oracle11g

这有什么问题, 我收到此错误

OLE DB provider "OraOLEDB.Oracle" for linked server "hades" returned message "ORA-00933: SQL command not properly ended
ORA-06512: at "SAAP.EDI", line 1416".
OLE DB provider "OraOLEDB.Oracle" for linked server "hades" returned message "ORA-00933: SQL command not properly ended
ORA-06512: at "SAAP.EDI", line 1416".
Msg 7320, Level 16, State 2, Line 2
Cannot execute the query "select * from table(edi.ftCustomerCatalog('010','145','000164'))" against OLE DB provider "OraOLEDB.Oracle" for linked server "hades". 

代码:

function ftCustomerCatalog(comno varchar2,cpls varchar2, cuno varchar2) return tblCustomerCatalog pipelined 
is
  c sys_refCursor;
  r recCustomerCatalog;
  sq varchar2(3000);
begin
  sq:='select  
        a.comno
        ,a.t$cpls
        ,coalesce(a.t$cuno,b.t$cuno) as t$cuno
    ,a.t$cpgs,a.t$item
        ,a.t$Upcd
        ,a.t$dsca
        ,a.t$wght
        ,a.t$ship
      ,coalesce(b.t$stdt,c.t$stdt,d.t$stdt,e.t$stdt,f.t$stdt) as T$STDT
      ,coalesce(b.t$tdat,c.t$tdat,d.t$tdat,e.t$tdat,f.t$tdat) as t$tdat
      ,coalesce(b.t$qanp,c.t$qanp,d.t$qanp,e.t$qanp,f.t$qanp) as t$qanp
      ,a.t$pric
      ,coalesce(b.t$disc,c.t$disc,d.t$disc,e.t$disc,f.t$disc) as t$disc
      ,coalesce(b.source,c.source,d.source,e.source,f.source) as Source 
      from  table(edi.ftAllPlCatalogs(:comno,cpls)) where t$cuno=:cuno a
        left join table(edi.ft30ciDiscounts(:comno,:cpls,:cuno)) b on a.t$item=b.T$item and a.t$cuno=b.t$cuno
        Left Join table(edi.ft31CPGDiscounts(:comno,:cpls,:cuno))  c on a.t$cpgs=c.t$cpgs
        left Join table(edi.ft31Cdiscounts  (:comno,:cpls,:cuno)) d on d.t$cpgs is null
        left join table(edi.ft33plpgDiscounts(:comno,:cpls)) e on d.t$disc is null and a.t$cpgs=e.t$cpgs
        left join table(edi.ft33PlDiscount(:comno,:cpls)) f on e.t$disc is null 
      Order by A.T$CPGS, a.t$item;';
  Open c for SQ using
      comno,cpls,cuno
      ,comno,cpls,cuno
      ,comno,cpls,cuno
      ,comno,cpls,cuno
      ,comno,cpls
      ,comno,cpls;
   LOOP
    fetch c into r;
    exit when c%notfound;
    pipe row(r);
  END LOOP;
  close c;
end;

1 个答案:

答案 0 :(得分:2)

我不认为语法

t$stdt=coalesce(b.t$stdt,c.t$stdt,d.t$stdt,e.t$stdt,f.t$stdt)

在Oracle中有效。

假设意思是为表达式提供别名,我相信Oracle的等价物将是:

coalesce(b.t$stdt,c.t$stdt,d.t$stdt,e.t$stdt,f.t$stdt) AS stdt

(AS关键字开始可选)