Cra*_*g C 3 sql oracle stored-procedures oracle10g
我编写了一个脚本,计划在一夜之间运行以复制昨天的表,删除昨天的表,创建新表,然后比较更改.这可以作为计划任务正常工作,但我真的很难找到允许用户动态执行它以进行测试的方法.
我真正想要做的是将它全部打包到存储过程中,因为我有一个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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
该EXECUTE IMMEDIATE
语句在PL/SQL块或存储过程或包中执行动态SQL语句或匿名PL/SQL块.如果您需要运行类似等的DDL语句DROP
,则更具体地使用它CREATE TABLE
.您不能将PL/SQL中的DDL命令作为DML语句执行,因此唯一的方法是动态SQL.更多信息在这里和这里.
归档时间: |
|
查看次数: |
17951 次 |
最近记录: |