2014-06-22 37 views
0

什么是错, 我得到这个错误ORA-00933:SQL命令未正确结束ORA-06512:

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; 
+2

您收到默认的错误消息来自oracle。在很长的查询中有一处语法错误。我建议重新开始并采取婴儿步骤。写一行并运行它。然后再添加一点点并运行它。每次出现错误时,您都会知道这是由您添加的最后一件事引起的。 –

回答

2

我不认为语法

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

是Oracle有效。

假设的意义是为表达提供了一个别名,我相信甲骨文相当于将是:

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

(AS关键字开始可选)

+0

绝对正确..谢谢,修改了代码使用'AS',但现在我得到这个O DBOL提供商“OraOLEDB.Oracle”的链接服务器“hades”返回消息“ORA-00933:SQL命令没有正确结束 ORA-06512:at “SAAP.EDI”,第1416行“。 对于链接服务器“hades”OLE DB提供程序“OraOLEDB.Oracle”返回的消息“ORA-00933:SQL命令未正确结束 ORA-06512:在”SAAP.EDI“,第1416行。 Msg 7320,Level 16,State 2,Line 2 对OLE DB提供程序“OraOLEDB.Oracle”无法执行查询“select * from table(edi.ftCustomerCatalog('010','145','000164'))”对于链接服务器“哈迪斯”。 – TonyP

+1

@TonyP你不需要查询字符串中的分号(';') –

+0

@dave,我使用和不使用分号,没有差异。 – TonyP

相关问题