2017-10-05 44 views
0
create or replace PROCEDURE NG_SP_TEST_ZAPIN 
as 
i number; 
q nvarchar2(100); 
BEGIN 
    i:=1; 
    select ftrquestion1 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion2 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion3 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion4 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion5 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion6 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion7 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 
    select ftrquestion8 into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1;  
END; 

我必須從表中選擇具有相同前綴的特定列,最後一個值單獨更改爲0..10而不是寫入10選擇查詢我可以放入循環並作爲列的最後一個字符進行迭代(作爲循環值)。在選擇查詢列名中使用循環

回答

0

您應該在一個查詢中獲取所有字段並將數據拆分到代碼中。而當我閱讀你的代碼時,每一行都會覆蓋之前的選擇?

select ftrquestion1, 
ftrquestion2, 
ftrquestion3, 
ftrquestion[...] 
into q from NG_ZAPIN_FTRCHECKLIST where wi_name=1; 

其中q是一個字符串數組,但我不知道你使用的語言,以及如何將其保存選擇集到一個數組中。 還是我的請求錯誤?

+0

實際的工作是在同一行中有列ftrquestion(0..10)和ftranswer(0..10),但我需要在一行中作爲ftrquestion0和ftranswer0並重復,直到ftrquestion10和ftranswer10 ..幫我在這.. – Mano

+0

我猜你的數據表是不是在一個規範化的形式嗎?這是相當骯髒的方法,你在那裏使用。一個骯髒的解決方案將是一個循環中的字符串連接。因此,做一個從0到10的循環,並將迭代作爲文本添加到您的字段中,如「Select ftrquestion + loopVariable,ftranswer + loopvariable into q from [...]」。 – kurdy

+0

你確定oracle中的連接是由「+」完成的,bcos是給出錯誤的。請檢查併發布確切的查詢,因爲我可以直接使用它。錯誤(8,12):PL/SQL:ORA-00904:「FTRQUESTION」:無效標識符 – Mano