您可以根据您的最终要求使用 aPROCEDURE
或 a 。FUNCTION
一个过程可以完成工作,但您必须随后查询MAYA
表以查看您插入了多少条记录。
IE
CREATE OR REPLACE
PROCEDURE maya_insert
IS
BEGIN
-- Truncate the maya table
EXECUTE IMMEDIATE 'TRUNCATE TABLE MY_SCHEME.MAYA';
--
-- Insert records into maya
INSERT INTO MY_SCHEME.MAYA
(
ID_TEST,
IQ,
DATE_,
COMMENT1
)
SELECT ID_TEST,
IQ,
DATE_,
COMMENT1
FROM MY_SCHEME.STAGE_MAYA
WHERE STAGE_MAYA.ID_TEST = (SELECT MAX(ID_TEST)
FROM MY_SCHEME.STAGE_MAYA);
EXCEPTION
WHEN others
THEN
DBMS_OUTPUT.put_line('MAYA_INSERT error: '||sqlerrm);
END maya_insert;
COMMIT;
除非您在此过程之外提交事务,否则您可能也希望将 a放在那里,如果您确实添加了COMMIT;
then 也在ROLLBACK;
异常部分添加 a。请注意,尽管该TRUNCATE
语句不能回滚,因为它是DDL
. 如果您需要能够回滚它,那么您将不得不使用较慢的DELETE
命令,即DML
.
如果您需要知道插入了多少条记录,请MAYA
使用一个函数:
IE
CREATE OR REPLACE
FUNCTION maya_insert
RETURN NUMBER
IS
BEGIN
-- Truncate the maya table
EXECUTE IMMEDIATE 'TRUNCATE TABLE MY_SCHEME.MAYA';
--
-- Insert records into maya
INSERT INTO MY_SCHEME.MAYA
(
ID_TEST,
IQ,
DATE_,
COMMENT1
)
SELECT ID_TEST,
IQ,
DATE_,
COMMENT1
FROM MY_SCHEME.STAGE_MAYA
WHERE STAGE_MAYA.ID_TEST = (SELECT MAX(ID_TEST)
FROM MY_SCHEME.STAGE_MAYA);
-- Return the number of records inserted
RETURN SQL%ROWCOUNT;
EXCEPTION
WHEN others
THEN
DBMS_OUTPUT.put_line('MAYA_INSERT error: '||sqlerrm);
RETURN -1;
END maya_insert;
在这里,您将获得插入的记录数,如果有错误,您将被-1
退回。如果您需要,请参阅上面的评论COMMIT;
并ROLLBACK;
添加。
至于包。包用于在数据库中将逻辑相关的功能过程和其他处理组合在一起。由于您只有一个过程或功能,因此在此阶段无需将其包装在一个包中。请参阅:http ://docs.oracle.com/cd/B10501_01/appdev.920/a96624/09_packs.htm#362
希望能帮助到你...