2016-05-11 89 views
0

我正在嘗試編寫一個小型的oracle存儲過程。我想從表中獲取message的最大值,並將該值存儲到另一個表中。從表中獲取maxid並使用oracle過程插入到另一個表中

我寫了這個....

create or replace procedure WITHOUT_TYPE is 
vid int; 
begin 
TRUNCATE TABLE LOAD1; 
select max(MESSAGEID) into vid from LOAD; 
INSERT INTO LOAD1(vid) VALUES(vid); 
end; 
/

,但沒有得到在VID中裝入1表中的值。

任何人都可以檢查和幫助嗎?

回答

2

如下您可以把它改寫:

CREATE OR REPLACE PROCEDURE WITHOUT_TYPE IS 
    vOutput number; 
BEGIN 
    /* TRUNCATE is a DDL and can not be executed as a simple statement */ 
    DELETE LOAD1; 

    /* you can directly insert your value, no need for a variable */ 
    INSERT INTO LOAD1(vid) 
     SELECT MAX(MESSAGEID) 
     FROM LOAD; 

    /* retrieve the stored value */ 
    select vid 
     into vOutput 
    from LOAD1; 
    dbms_output.put_line('Value: ' || vOutput); 
END; 
/

我刪除了TRUNCATE,因爲你不能使用PL/SQL程序中的DDL(無動態SQL);此外,TRUNCATE只應在嚴格需要時使用,並且非常小心。

除此之外,你不需要一個變量來處理你的最大值;您可以使用單個insert-select語句直接在目標表中插入值;

+0

感謝您的好評。當我運行程序時,沒有得到任何輸出。我也設置了SET SERVEROUTPUT ON,當我運行「WITH WITHOUT_TYPE;」時也顯示在表load1中的列vid中沒有值... – Kate

+0

serveroutput啓用打印;你應該添加類似dbms_output(...)的東西來查看。剛剛編輯以顯示示例 – Aleksej

+0

,請檢查此屏幕截圖http://prnt.sc/b2qr3e。過程是成功創建的,但是當我從load1運行select *時,它顯示沒有從過程....計算出的值! – Kate

相關問題