我编写了一个脚本,计划在一夜之间运行以复制昨天的表,删除昨天的表,创建新表,然后比较更改。这可以作为计划任务正常工作,但我真的很难找到允许用户动态执行它以进行测试的方法。
我真正想要的是将它全部打包到存储过程中,因为我有一个eForm工具,可以轻松地让用户(非技术人员)能够通过点击执行该过程。
以下是脚本启动的示例。任何人都可以帮我把它变成一个存储过程,因为它显然不会接受像DROP TABLE这样的命令作为标准。
感谢。
DROP TABLE SQL2005TEST.ABSENCEFULLDATADIFF_YESTERDAY;
DROP TABLE SQL2005TEST.ABSENCELATESTSTART_YESTERDAY;
DROP TABLE SQL2005TEST.ABSENCELATESTEND_YESTERDAY;
CREATE TABLE SQL2005TEST.ABSENCEFULLDATADIFF_YESTERDAY
AS SELECT * FROM SQL2005TEST.ABSENCEFULLDATADIFF;
CREATE TABLE SQL2005TEST.ABSENCELATESTSTART_YESTERDAY
AS SELECT * FROM SQL2005TEST.ABSENCELATESTSTART;
CREATE TABLE SQL2005TEST.ABSENCELATESTEND_YESTERDAY
AS SELECT * FROM SQL2005TEST.ABSENCELATESTEND;
答案 0 :(得分:8)
CREATE OR REPLACE PROCEDURE proc_name AS
BEGIN
EXECUTE IMMEDIATE 'DROP TABLE SQL2005TEST.ABSENCEFULLDATADIFF_YESTERDAY';
.....
EXECUTE IMMEDIATE 'CREATE TABLE SQL2005TEST.ABSENCELATESTEND_YESTERDAY
AS SELECT * FROM SQL2005TEST.ABSENCELATESTEND';
....
....
EXCEPTION
....
....
END;
EXECUTE IMMEDIATE
语句在PL / SQL块或存储过程或包中执行动态SQL语句或匿名PL / SQL块。如果您需要运行DROP
,CREATE TABLE
等DDL语句,则更具体地使用它。您不能将PL / SQL中的DDL命令作为DML语句执行,因此唯一的方法是动态SQL。更多信息here和here。