所以我一直在負責一些T-SQL代碼轉換爲C代碼。誰寫的代碼,我轉換沉迷於從小到沒有代碼禮節。我知道這是因爲完全沒有評論,缺乏壓痕,缺乏開始,除非絕對必要的語法(和一些扔在任意的好辦法)/結束塊。晃晃悠悠的「其他」分辨率
這引發了一些問題。我正在轉換的代碼基於Metaphone算法。我說「基於」,因爲它有很多......「無證的改進」,這使得它與官方實施有所不同。正因爲如此,我不能只是去抓住一些音位實現,因爲那就不是實際上是一個「正確」的翻譯。
所以這裏的問題(S)的根:
if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @[email protected] + 'j'
else
set @[email protected] + 't'
因爲音位是如何工作的,我敢肯定,他們的意思是:
if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @[email protected] + 'j'
else
set @[email protected] + 't'
但我不知道它實際上是被解釋爲:
if @str1='d'
if substring(@str,@cnt,3) in ('dge','dgy','dgi')
set @[email protected] + 'j'
else
set @[email protected] + 't'
這個小片段是不是太什麼大不了的事,但它之後,有一個sectio n有五個「if」語句並且只有一個「else」語句並且沒有開始/結束塊來明確地排列它們。這一切都不是什麼大不了的事,如果我能實際運行的代碼來測試看看,但可悲的是,我沒有一個環境來測試它,我也不具有從代碼的前面使用任何輸出。
TL;博士:做任何你T-SQL大師那裏知道了上述兩種說法的,它會被解釋爲,什麼是他們的輪班規則/減少T-SQL的衝突? (附加到第一個「如果」的聲明,附上最後的「如果」聲明,隨機挑選一個?)
編輯:這是另一個有趣的幾行。
if @str1='t'
if substring(@str,@cnt,3) in ('tia','tio')
set @[email protected] + 'x'
else
if @str2='th'
set @[email protected] + '0'
else
if substring(@str,@cnt,3) <> 'tch'
set @[email protected] + 't'
EDIT2:好吧,如果我正確地閱讀這些答案,這意味着上述實際上是
if @str1='t'
if substring(@str,@cnt,3) in ('tia','tio')
set @[email protected] + 'x'
else
if @str2='th'
set @[email protected] + '0'
else
if substring(@str,@cnt,3) <> 'tch'
set @[email protected] + 't'
這可能是SQL Server的T-SQL代碼,而不是Oracle的PL/SQL代碼。請更改您的描述並修改您的代碼。 – Codo
謝謝你的擡頭。分配給我的人說這是PLSQL,但我從來沒有打擾過驗證。我沒有經驗,因爲它是可讀的,我從來沒有打擾過去驗證。 –
「shift/reduce」並不真正描述這個問題。請嘗試使用「T-SQL if/else嵌套問題」。 –