2015-12-10 17 views
-2

這就是它應該如何工作: 我有一個叫做Pro2的表,名爲finall的列是一個日期,另一個名爲validade。如果finall已經發生或正在發生的事情validade設置爲0使用pl/sql中的日期時出錯?

BEGIN 
    FOR validade in (SELECT * FROM PRO2 WHERE TRUNC(finall)<= TRNCU(SYSDATE)) 
    LOOP 
    SET validade = 0 
    END LOOP; 
END; 

我在新的PL/SQL,請幫助!

+0

從數據庫顯示什麼樣的錯誤?考慮更新你的問題。 – Marcinek

回答

0

您在第二個TRUNC命令中有錯誤。

您不應將validade(這是CURSOR)設置爲任何值。

在PL/SQL中,賦值運算符是:=而不是SET

試試這個:

BEGIN 
    FOR r_record IN (SELECT * 
         FROM PRO2 
         WHERE TRUNC(finall) <= TRUNC(SYSDATE)) 
    LOOP 
     UPDATE PRO2 t1 
      SET t1.validade = 0 
      WHERE t1.id = r_record.id; 
    END LOOP; 
END; 

你不應該使用PL/SQL這樣的事!

當可能的時候使用SQL!

UPDATE PRO2 
    SET validade = 0 
WHERE TRUNC(finall) <= TRUNC(SYSDATE); 
+0

非常感謝您的幫助,但它仍然無法運行。 –

+0

它給r_record和id中的無效標識符以及更新pro2 t1中忽略的語句。 SQL的工作原理,但不幸的是我真的必須在PL/SQL中完成,我只是不明白它 –

0

每一個精心設計的Oracle表有一個主鍵,通常被稱爲ID或與它的結局。這就是亞歷克斯通過t1.id所表達的意思。您應該詢問構成PRO2主鍵的列( - 組合)並替換它。

像顯示UPDATE DML代碼可以包含在PLSQL和確實是最好的解決辦法:

BEGIN 
    -- other things here .... 
    UPDATE pro2 
     SET validade = 0 
    WHERE TRUNC(finall) <= TRUNC(SYSDATE); 
-- and here ... 
END; 
+0

我實際上已經解決了這個解決方案,問題是我在Java中使用它時不會運行。它只在我刪除開始和結束時運行,並且因此它不是PL/SQL。而我的問題是它必須在PLSQ1中。 –

+0

@InêsFidalgo你需要更新你的問題以包含所有這些信息 – user001