I'm trying to write a small oracle stored procedure. I want to get max of messageid from a table and store that value into another table.
I have written this....
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;
/
But not getting a value in vid in LOAD1 table.
Can anyone please check and help ?
答案 0 :(得分:2)
You can rewrite it as follows:
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;
/
I removed the TRUNCATE because you can not use a DDL within a Pl/SQL procedure (without dynamic SQL); besides, TRUNCATE should only be used if strictly necessary, and very carefully.
Besides that, you don't need a variable to handle your max value; you can directly insert your value in the target table with a single insert-select statement;