Oracle 使用select和insert语句将sql代码转换为过程
有人能帮我把下面的sql代码转换成过程吗?我读了一些www上的资料,并得出了一个结论(可能是),它应该是包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
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
您可能需要提交一个COMMIT如果添加COMMIT,则代码>也在其中,除非您在此过程之外提交事务
然后还添加一个回滚代码>在异常部分。
请注意,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;