2016-05-29 107 views
-2

我想比較where子句中的變量值。 變量具有正確的值,但在where子句中它不起作用。問題,而傳遞給變量

Declare var varchar (50) 
Begin 
For i in (select table_name from tmp_table) 
Loop 
Var := i.table_name 
Insert into new_table 
Select * from all_tab_name atn 
Where atn.table in (var) 
Endloop 
End; 

這是簡單的查詢我原來的查詢是更加大了,但是這是我有問題 它的工作原理,如果我硬編碼一個表名,但它不是在循環工作,如果我要麼通過變量或指定點直接i.table名稱

在此先感謝幫助!

+0

你是什麼意思的「不工作」?除非你告訴我們什麼不起作用,否則我們無法幫助你。 –

+0

請發佈確切的錯誤消息,您正在獲取 – SubhasisM

回答

1

幾件事情從蝙蝠身上跳出來,但在修復這些錯誤後,可能會發現更多的錯誤。

Oracle建議在varchar上使用varchar2,但這並非錯誤。然後,您在聲明結尾處沒有添加分號(;); 的一個錯誤,它足以使編譯器引發錯誤。然後,你在其他幾個地方錯過了分號。這是您第一次在PL/SQL中編寫任何東西嗎?這當然似乎是這樣。

您使用循環變量i但您沒有聲明它。這會拋出另一個錯誤。你說這是更長的代碼的一部分,也許i在其他地方聲明 - 那麼你必須編輯你的帖子,包括全部你的代碼的相關部分(如果你能夠理解哪些是)。

然後,您分配給var的值i.table_name。那是什麼意思?我已經是從tmp_table中選擇的table_name;你的意思是我有一個名字,巧合的是,table_name?非常不可能。你的意思是簡單地把我分配給var?

我真的無法理解下面幾行代碼中的任何內容,你在那裏做了什麼?

最後,END LOOP是兩個單詞;如果你寫Endloop,你會得到另一個錯誤。

我建議你在開始編寫程序之前花點時間學習PL/SQL;你發佈的內容顯示了對它的理解。如果沒有檢查正確的含義和正確的語法,並在此處張貼以尋求幫助,您將無法通過編寫您不明白的代碼來節省時間。這不是它的工作原理。

祝你好運!

0

你是缺失子句into ...

+0

此答案可能無法真正有用的OP,因爲它不清楚如何您的建議可能會應用來解決問題。請介紹一下你的建議,例如通過顯示結果正確的代碼。 – rpy