2014-03-30 28 views
0

爲什麼不能編譯?Pro * C語法與選擇

EXEC SQL insert into ssa (id) 
    select (select max(id)  
     from ss s 
     where s.id = t.id)   
    from temp_sca t  
    where not exists  
     (select null  
     from sca ssa 2  
     where ssa2.ss_id = ( select max (id)   
       from ss s   
       where s.x = t.ss_id)  
       and ssa2.x = t.x)   

錯誤,我得到:

選擇(選擇MAX(ID) ................... 1
PCC-d-02201設,出現符號「MAX」期待一個FO以下時:

() * + ... 

的符號「(」代替「最大」繼續

難道我們不能在選擇素嵌入選擇Pro * C中的t子句?
Solaris 10上的Oracle 11g

或者是否有解決方法?

+0

我在想,也許動態的sql語句可能會有所斬獲。 – frododot

回答

0

是的,將前面提到的轉換爲一個動態的sql c-string,然後在生成的sql/c字符串上執行一個EXEC SQL EXECUTE IMMEDIATE,一切都很好。希望別人可能會發現這個解決方案很有幫助。

0

此處使用MAX函數,MAX應與GROUP BY一起使用。所以,當Pro * C編譯器試圖編譯它時,它不會找到一個GROUP BY並拋出這個編譯錯誤。