create or replace procedure ljy_dm_product(
prod_id varchar2
)v_prom_nbr  varchar2(50);--v_offer_id varchar(50);
begin
v_prod_id := prod_id;
create table ls_dm_product as
select  a.prod_id as prod_id_dm
from product a
where a.last_upd > to_date('20180920000000', 'yyyymmddhh24miss')
and not exists(select 1 from product b where a.prod_id = b.prod_id)
and a.prod_id = v_prod_id;exception
    when others then
    null;
 end;
end;

解决方案 »

  1.   

    在存储过程中你要执行create table的操作得用动态执行sql:EXECUTE IMMEDIATE  'create table aaa select * from ccc'按你得要求你需要新建个参数如  v_sql varchar2(1000);
    然后把sql赋值给这个参数  如   v_sql := 'create table'
    最后执行这个sql  EXECUTE IMMEDIATE v_sql     
    这样就可以完成建表得操作,中间给参数赋值得一块自己琢磨下就行,还是部分要靠自己得
      

  2.   

    存储过程中的DML只能用动态SQL1楼有一点口误,新增的V_SQL是变量不是参数
      

  3.   

    嗯,我后面改成了这样
    create or replace procedure ljy_dm_product(
    prod_id varchar2
    )v_prom_nbr  varchar2(50);
    v_sql_1 varchar2(4000);beginv_sql_1 := 'create table ls_dm_product as
    select  a.prod_id as prod_id_dm
    from product a
    where a.last_upd > to_date('20180920000000', 'yyyymmddhh24miss')
    and not exists(select 1 from product b where a.prod_id = b.prod_id)
    and a.prod_id = :1' ;
    EXECUTE IMMEDIATE v_sql_1
    using prom_id;exception
        when others then
        null;
    end;
    这个参数调用有错吗? 编译成功,但是测试运行部出来
      

  4.   

    嗯,我后面改成了这样
    create or replace procedure ljy_dm_product(
    prod_id varchar2
    )v_prom_nbr  varchar2(50);
    v_sql_1 varchar2(4000);beginv_sql_1 := 'create table ls_dm_product as
    select  a.prod_id as prod_id_dm
    from product a
    where a.last_upd > to_date('20180920000000', 'yyyymmddhh24miss')
    and not exists(select 1 from product b where a.prod_id = b.prod_id)
    and a.prod_id = :1' ;
    EXECUTE IMMEDIATE v_sql_1
    using prom_id;exception
        when others then
        null;
    end;
    这个参数调用有错吗? 编译成功,但是测试运行部出来
    赋值给变量的sql语句,建议你先用select  'create table ******' from dual生成一下,然后执行下查询出来的sql,能跑的话就可以全部放到v_sql_1里面去