oracle中表名能否用变量?怎么用

比如这条sql:select*fromok201003不能直接表示成:select*fromok||to_char(trunc(sysdate),'yyyymm')请问该... 比如这条sql:

select * from ok201003

不能直接表示成:
select * from ok||to_char(trunc(sysdate),'yyyymm')

请问该怎么做呢?
展开
 我来答
cxuans04
2010-03-21 · TA获得超过239个赞
知道小有建树答主
回答量:323
采纳率:0%
帮助的人:292万
展开全部
呵呵 我只能说介绍一下我的几点经验。。。

表名是不可以使用变量的。。。
我碰到这种情况的话,一般我先定义一个VARCHAR2的变量,例如v_sql,然后把DDL或者DDM语句写进去。仿照你的情况。。

v_tablename:='ok'||to_char(trunc(sysdate),'yyyymm');
v_sql:='select * from '||v_tablename||';';

然后通过对v_tablename 的动态赋值,再执行。。

execute immediate v_sql;

类似的,
OPEN cur_out FOR v_sql;

值得说明的是要注意空格。。

望指正、。。。
badkano
2015-12-23 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144776 获赞数:885374
团长

向TA提问 私信TA
展开全部

表名可用变量,但一般需要用到动态sql,举例如下:

declare 
v_date varchar2(8);--定义日期变量
v_sql varchar2(2000);--定义动态sql
v_tablename varchar2(20);--定义动态表名
begin
 select to_char(sysdate,'yyyymmdd') into v_date from dual;--取日期变量
 v_tablename := 'T_'||v_date;--为动态表命名
 v_sql := 'create table '||v_tablename||'
 (id int,
 name varchar2(20))';--为动态sql赋值
 dbms_output.put_line(v_sql);--打印sql语句
 execute immediate v_sql;--执行动态sql
end;

执行以后,就会生成以日期命名的表。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
要你命三千之赵
2010-03-17 · TA获得超过567个赞
知道小有建树答主
回答量:432
采纳率:0%
帮助的人:385万
展开全部
没懂你 意思, 表名不能修改,只能在写SQL的时候另外给个别名(为了简化)

select * from ok||to_char(trunc(sysdate),'yyyymm')
|| 此符号用于字符串的连接,但是并不是字符串相同就能表示表名,'ok'||to_char(trunc(sysdate),'yyyymm') 这个字符串连接好后,其实是'ok201003' 并不是表名
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式