求个存储过程~大家帮帮忙~ 要求这个存储过程能 1 自动创建一张名字为当天日期的已知格式的表 2 同时向表中插入若干数据,数据是从其他若干张表中联合查询得来的  另外 此存储过程要每月执行一次 如何操作?是不是要用到job,求详细步骤。本人原来接触oracle不多,这次临时受命,赶鸭子上架,还希望大家帮帮忙~ 拜谢了,小弟分不多,42分全部送上! 

解决方案 »

  1.   

    这需在PL/SQL中动态执行DDL语句。
    创建存储过程后,再创建一个作业,定期执行,这个不难。可以把多表联合查询的其它表的表结构贴一下,才能写具体的存储过程。否则,只能写一下框。
      

  2.   


    所有表结构贴上来实在太多了。我有的一些TSQL的基础,大家可以先帮我假设几个简单的表结构,能让我照猫画虎就行…… 
      

  3.   

    存储过程你go
    if object_id('p_create')is not null
    drop proc p_create
    go
    create proc p_create
    as
    go
    if object_id('tbl')is not null
    drop table tbl
    go
    create table tbl(
    --表结构
    )
    go
    insert into tbl --理解查询语句
    --调用存储过程
    exec p_create--这是在MSSQL中的写法,oracle也应该是这样吧,具体的你修改一下就好了
      

  4.   

    CREATE OR REPLACE PROCEDURE P_TB_DAY(P_DAY NUMBER) AS  V_SQL VARCHAR2;BEGIN  V_SQL := 'CREATE TABLE '''P_DAY''' as select * from 已知格式的表' :
      EXECUTE IMMEDIATE;
      COMMIT;
      V_SQL := 'INSERT INTO 'P_DAY' AS SELECT (填写表结构相对应的字段) FROM TABLE 1 t,TABLE 2 t1 ,TABLE t2';  COMMIT;END P_TB_DAY;定计划跑的话,可以用JOB实行。
      

  5.   

    EXECUTE IMMEDIATE  v_sql;
     这里加个V_SQL 。。
      

  6.   


    1. 创建表
      A create table 'smart_deal_'||to_char(sysdate,'yyyymmdd') as 
      select * from yourtbl where 1=1;
      B  create table 'smart_deal_'||to_char(sysdate,'yyyymmdd') as select * from yourtable where 1<>1
         insert into 'smart_deal_'||to_char(sysdate,'yyyymmdd') select * from yourlianheTblName where 1=1 ;2. 创建JOB
    sys.dbms_job.submit(job => :job,
                          what => 'youprocedurename;',
                          next_date => to_date('15-02-2012 08:32:00', 'dd-mm-yyyy hh24:mi:ss'),
                          interval => 'sysdate+30');
    commit;
      

  7.   

    简单,动态sql +job定时作业
      

  8.   

    --存储过程没写全
    CREATE OR REPLACE PROCEDURE P_ZC1
    AS
    BEGIN
    create table XX as select * from 已知表结构表名 where 1<>1;
    COMMIT;
    insert into XX values(取来的数据);
    COMMIT;
    END P_ZC1;
    --- job begin
      sys.dbms_job.submit(job => :job,
                          what => 'PP_ZC1',
                          interval => 'trunc(sysdate)+30');
      commit;
    end;
      

  9.   

    trunc(sysdate) 应该改为 sysdate