PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:

双尾鱼 2012-06-04 05:40:01
create or replace procedure pm_proc is
province_id number(2):=11; --需要修改为本省ID
last_end_flag number;
prop_date_begin date;
prop_date_end date;
sysdate_ date;
sql_ varchar2(1024);
sql_init varchar2(1024);
sql_condition varchar2(1024);
begin
select sysdate into sysdate_ from dual;
--检查上次执行是否结束
select count(*) into last_end_flag from prop_log p where p.start_flag = 1and end_flag = 0;
if last_end_flag > 0 then
insert into PROP_LOG values (1, 0, sysdate_, sysdate, 0, '存储过程上次执行未结束');
commit;
return;
end if;
--本次执行开始,首先向 prop_log 表中添加启动记录
insert into PROP_LOG values (1, 0, sysdate_, sysdate_, 0, '');
commit;

--每次取 sysdate - 7分钟 到 sysdate - 2分钟 之间的数据放入中间表中。
--本次执行采集数据的开始时间
select sysdate - 1 / 24 / 60 * 7 into prop_date_begin from dual;
--本次采集数据的结束时间
select sysdate - 1 / 24 / 60 * 2 into prop_date_end from dual;
--判断是否跨天
if to_char(prop_date_begin, 'yyyymmdd') = to_char(prop_date_end, 'yyyymmdd') then
--这行开始报错。。。求解
create table propertyvalues_pm_up as (select * from propertyvalues p );

--where p.datestr = to_char(prop_date_begin, 'yyyymmdd') and p.timestr > to_char(prop_date_begin, 'hh24miss') and p.timestr < to_char(prop_date_end, 'hh24miss'));
commit;
else
create table propertyvalues_pm_up as (select p.*,sysdate_ as SYSDATE_FLAG from propertyvalues p where (p.datestr = to_char(prop_date_begin, 'yyyymmdd') and p.timestr > to_char(prop_date_begin, 'hh24miss')) or (p.datestr = to_char(prop_date_end, 'yyyymmdd') and p.timestr < to_char(prop_date_end, 'hh24miss')));
commit;
end if;

...全文
2732 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
小德 2012-06-05
  • 打赏
  • 举报
回复
PL/SQL不能直接运行DDL。
可参考
1、8i以下版本可以用dbms_sql包动态执行ddl
2、8i以上版本还可以用
execute immediate sql;
dbms_utility.exec_ddl_statement('sql');

如:
declare
cur INTEGER:= DBMS_SQL.OPEN_CURSOR;
fdbk INTEGER;
BEGIN
DBMS_SQL.PARSE (cur, 'create table a(a number(2))', DBMS_SQL.V7);
fdbk := DBMS_SQL.EXECUTE (cur);
DBMS_SQL.CLOSE_CURSOR (cur);
END;
ray_suen 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

引用 3 楼 的回复:

引用 1 楼 的回复:

没有end;
能具体说下吗?

1 你贴的不是全部代码

2 PL/SQL不能直接执行建表等DDL语句,
想要执行就用execute immediate 'create table .....';执行。
[/Quote]

正解
forgetsam 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

引用 1 楼 的回复:

没有end;
能具体说下吗?
[/Quote]
1 你贴的不是全部代码

2 PL/SQL不能直接执行建表等DDL语句,
想要执行就用execute immediate 'create table .....';执行。
双尾鱼 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

没有end;
[/Quote]能具体说下吗?
双尾鱼 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
create or replace procedure pm_proc is
province_id number(2):=11; --需要修改为本省ID
last_end_flag number;
prop_date_begin date;
prop_date_end date;
sysdate_ date;
sql_ ……
[/Quote]能具体说下哪个地方吗?
forgetsam 2012-06-04
  • 打赏
  • 举报
回复
没有end;

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧