oracle中表名能否用变量?怎么用
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle中表名能否用变量?怎么用相关的知识,希望对你有一定的参考价值。
比如这条sql:
select * from ok201003
不能直接表示成:
select * from ok||to_char(trunc(sysdate),'yyyymm')
请问该怎么做呢?
表名是不可以使用变量的。。。
我碰到这种情况的话,一般我先定义一个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;
值得说明的是要注意空格。。
望指正、。。。 参考技术A
表名可用变量,但一般需要用到动态sql,举例如下:
declarev_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;
执行以后,就会生成以日期命名的表。
select * from ok||to_char(trunc(sysdate),'yyyymm')
|| 此符号用于字符串的连接,但是并不是字符串相同就能表示表名,'ok'||to_char(trunc(sysdate),'yyyymm') 这个字符串连接好后,其实是'ok201003' 并不是表名
以上是关于oracle中表名能否用变量?怎么用的主要内容,如果未能解决你的问题,请参考以下文章