为什么oracle定时任务 都用 insert语句不用crate as语句:
一、用insert
create or replace procedure ACCESS_PROD is
begin
execute immediate 'truncate table access_prod_inst';
insert into access_prod_inst select* from access-prod_inst@crmbm;
二、用select as
create or replace procedure ACCESS_PROD is
begin
drop tabale ACCESS_PROD;
create table access_prod_inst as select* from access-prod_inst@crmbm;
drop table,create table是DDL在procedure中是不能直接调用的,要使用execute immediate 的方式使用,
而且一般都是delete table或'truncate table 然后在insert的方式,drop table风险性大对数据库的结构用影响,
如果你有其他的procedure调用到这个table,则这个其他的procedure会失效要重新编译方可使用
引用: 为什么oracle定时任务 都用 insert语句不用crate as语句
上中的 crate as 是什么意思?
编译出错
create or replace procedure ACCESS_PROD is
begin
execute immediate 'truncate table access_prod_inst';
insert into access_prod_inst
PROD_INST_ID,
PRODUCT_ID,
ACC_NBR,
OWNER_CUST_ID,
USE_CUST_ID,
ADDRESS_DESC,
PRODUCT_PROP,
PAYMENT_MODE_CD,
CREATE_DATE,
FINISH_TIME,
COL1,
COL4,
COL8,
COL6,
COL10,
COMMON_REGION_ID,
COMP_INST_ID,
COMMENTS,
COMM_COL1,
COMM_COL2,
CHANNEL_ID
select
PROD_INST_ID,
PRODUCT_ID,
ACC_NBR,
OWNER_CUST_ID,
USE_CUST_ID,
ADDRESS_DESC,
PRODUCT_PROP,
PAYMENT_MODE_CD,
CREATE_DATE,
FINISH_TIME,
COL1,
COL4,
COL8,
COL6,
COL10,
COMMON_REGION_ID,
COMP_INST_ID,
COMMENTS,
COMM_COL1,
COMM_COL2,
CHANNEL_ID
from
access_prod_inst@crmbm where lan_id='937'and state_cd='001';
execute immediate 'create index access_prod_inst on access_prod_inst (prod_inst_id,acc_nbr)';
commit;
end ACCESS_PROD;