2014-04-02 11 views
2

在oracle中親打破範圍* C/C++如何限制EXEC SQL每當SQLERROR做PRO * C/C++

EXEC SQL WHENEVER SQLERROR DO break; 

什麼這個說法實際上做?這會在下面的所有exec sql語句中插入break語句?

如何限制do break的範圍?

+0

[文檔說它做了什麼](http://docs.oracle.com/cd/E18283_01/appdev.112/e10825/pc_09err.htm#i12340)。它不會隨機插入它。限制範圍意味着什麼 - 如果你想要在代碼的不同部分採取不同的行動,你是否發佈多個WHENEVER指令? –

+0

@AlexPoole謝謝你的鏈接....對不起它不是隨機...它在程序中的所有EXEC SQL語句插入...我要限制到第一個EXEC SQL語句 –

+0

你只是意味着你需要在需要中斷處理的語句之後添加'EXEC SQL WHENEVER SQLERROR CONTINUE;'?當然,你可以自己檢查sqlca代碼,模仿預處理代碼中的內容。 –

回答

2

From the documentation

DO BREAK

一個實際的 「突破」 聲明放置在你的程序。在循環中使用此操作。當WHENEVER條件滿足時,程序退出它所在的循環。

所以無論何時遇到錯誤,都會發出一個break,這在循環之外並不意味着太多。如果你想要一個特定的語句之後的行爲復位,問題EXEC SQL WHENEVER SQLERROR CONTINUE;重置爲默認的錯誤處理行爲:

CONTINUE

你的程序繼續對下一個語句如果可能的話跑。這是默認操作,相當於不使用WHENEVER指令。您可以使用它來關閉狀態檢查。

實際上,您可以在兩個WHENEVER指令之間夾一條語句,以使其僅適用於該語句。

+0

它不能正常工作再次,EXEC SQL WHENEVER SQLERROR CONTINUE被插入到每個exec sql語句中。所以每當我在循環之外使用exec sql時,它的顯示錯誤將會繼續,而不會循環或切換 –

+1

您是在說'繼續'還是'繼續'?他們的意思不同,當你重置行爲時,你不會*想要'DO'。 –

+0

這就對了!我犯了一個錯誤。 –

1

這個表述像C預處理器宏一樣工作,所以它的作用從代碼中插入代碼直到源文件結束的位置開始,或者使用不同的命令重新聲明相同的語句。如果你在一個函數中聲明它,或者在任何其他代碼塊中聲明它:聲明適用於他的聲明直到文件結尾或下一個聲明

我經常使用這個指令來處理Pro中的遊標* C++源代碼:

​​
2

聲明就像C/C++宏:從申報點應用,直到文件的末尾或直到一個重新聲明,所以你必須要重新聲明它