Chinaunix首页 | 论坛 | 博客
  • 博客访问: 846749
  • 博文数量: 105
  • 博客积分: 636
  • 博客等级: 中士
  • 技术积分: 1704
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-11 10:57
文章分类

全部博文(105)

文章存档

2017年(4)

2016年(9)

2015年(18)

2014年(16)

2013年(34)

2012年(24)

分类: Oracle

2014-09-28 22:55:58

今天写了一个存储,目的是用ctas按日期格式生成一个表。中间出现了几次错误 总结一下以备后用。
最终语句如下。

create or replace procedure p_borrow_bk
as
v_sql1 varchar(200);
begin
  v_sql1:='create table cunhuo_'||to_char(sysdate,'yyyymmdd')||' as select * from cunhuo';
execute immediate v_sql1;

end;
出现的问题如下
1.首先在procedure中使用create语句是要用execute immediate的
2.to_char(sysdate,'yyyymmdd')格式化日期,如果用在execute immediate中,因为定义v_sql1时会有单引号,所以要把后面的格式变成双引号
  to_char(sysdate,''yyyymmdd'') 。通用的表示方式应该是:遇到函数内单引号,改为两个单引号:trunc(sysdate-1,''mm'')
3. to_char(sysdate,''yyyymmdd'')  这种形式是编译通过了 可是在执行时报:ora-00922 选项缺失或无效的错误。
4.改为'||to_char(sysdate,'yyyymmdd')||'  ora-00922的问题解决
5.这是执行时又报没有权限:加上create any table权限 问题解决

阅读(2532) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~