0

有人可以帮我将以下sql代码转换为程序吗?我已经阅读了一些 www 来源并得出结论(可能是)它应该是包装?

TRUNCATE TABLE MY_SCHEME.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)

非常感谢!

4

2 回答 2

2

您可以根据您的最终要求使用 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

希望能帮助到你...

于 2012-04-27T12:46:09.487 回答
0

一个包可以包含多个过程、函数、变量和定义。您对包而不是它包含的功能授予授权。一个主要的区别是,当包中的函数代码需要改变时,可以替换包体(创建或替换语法),这样不会导致依赖代码失效。对包外函数的更改总是会导致相关代码失效。

在您的情况下,您需要一个程序

于 2012-04-27T08:53:47.983 回答