Oracle 使用select和insert语句将sql代码转换为过程

Oracle 使用select和insert语句将sql代码转换为过程,oracle,stored-procedures,plsql,package,Oracle,Stored Procedures,Plsql,Package,有人能帮我把下面的sql代码转换成过程吗?我读了一些www上的资料,并得出了一个结论(可能是),它应该是包 TRUNCATE TABLE MY_SCHEME.MAYA; INSERT INTO MY_SCHEME.MAYA (ID_TEST, IQ, DATE_, COMMENT1) S

有人能帮我把下面的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)

非常感谢

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


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

您可以使用
过程
功能
,具体取决于您的最终需求

一个过程可以完成任务,但随后必须查询
MAYA
表以查看插入的记录数

i、 e

您可能需要提交一个
COMMITCOMMIT,则代码>也在其中,除非您在此过程之外提交事务
然后还添加一个
回滚在异常部分。
请注意,
TRUNCATE
语句不能回滚,因为它是
DDL
。如果需要回滚,则必须使用较慢的
DELETE
命令,即
DML

如果需要知道有多少条记录插入了
MAYA
,请使用以下函数:

i、 e

在这里,您将获得插入的记录计数,如果有错误,则返回
-1
。参见上文,了解我对
COMMIT的评论
回滚正在添加(如果需要)

关于包裹。包用于在数据库中将逻辑相关的函数、过程和其他处理组合在一起。由于您只有一个过程或函数,因此在此阶段不需要将其打包。 见:


希望对您有所帮助。

在TRUNCATE语句之前放置
创建或替换过程可能12\u PROC是BEGIN EXECUTE IMMEDIATE'
。将
放在
MAYA
之间TRUNCATE
语句末尾的code>。添加
;当其他数据库管理系统输出.PUT_行('Error:'| | SQLCODE |''.| | SQLERRM)时出现异常;5月12日结束在你最后一行之后。说得好。我喜欢你“修复”缺少“;”的语法错误的方式。我可以再问一个问题吗?创建过程的想法是,我将从unix批处理文件调用过程(现在我不知道如何)。另一方面,我可以从unix批处理文件执行sql脚本:我只需将_sql.sql文件放在批处理文件附近并从中调用它(来自.sh文件的代码:sqlplus userid=myscheme)/0611@TEST_DB10.33.19.13/test/DATA_UPLOAD/mysql_script.sql)。正确的方法是什么:调用存储过程或调用外部.sql文件?如果可以调用sql*Plus,则调用后只需运行
EXECUTE maya\u insert
以运行存储过程。您可以将execute语句放在.sql文件中并调用它。
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;
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;