将sysdate附加到Oracle中的表名

时间:2013-04-16 07:21:42

标签: oracle sysdate

我需要在Oracle中创建表时附加SYSDATE。请告诉我是否有直接的方法(仅使用SQL)或者我必须使用PL / SQL。

E.g。如果表名是ABC,我需要创建表为ABC_20130416。

如果需要更多信息,请告诉我。

3 个答案:

答案 0 :(得分:4)

如果SQL * Plus始终可用,您可以使用变量执行此操作,例如(未经测试):

SQL>col yyyymmdd for a8 new_value v
SQL>select to_char(sysdate, 'YYYYMMDD') as yyyymmdd from dual;
SQL>create table ABC_&v (col1 integer);

另一方面,如果您希望能够在任何地方执行此操作,则需要PL / SQL和动态SQL:

declare
  l_tablename varchar2(30) := 'ABC_' || to_char(sysdate, 'YYYYMMDD')
begin
  execute immediate 'create table ' || l_tablename || ' (col1 integer)';
end;
/

或者只是先正常创建表,然后重命名:

create table xyz (
  ... many columns ...
);

declare
  l_tablename varchar2(30) := 'ABC_' || to_char(sysdate, 'YYYYMMDD')
begin
  execute immediate 'rename xyz to ' || l_tablename;
end;
/

答案 1 :(得分:0)

仅限PL / SQL:

begin
  execute immediate 'create table foo_' || your_timestamp_here ;
end;

答案 2 :(得分:0)

PL / SQL代码:

declare
  tabname varchar(32);
begin
  tabname := 'abc'|| TO_CHAR(SYSDATE, 'YYYYMMDD');
  execute immediate 'create table '|| tabname ||' ( f1 number, f2 number, f3 number)';
end;