【问题标题】:Create table with a variable name用变量名创建表
【发布时间】:2015-05-15 08:51:35
【问题描述】:

我需要每天在(yyMMdd) 的表格中创建名称为日期的表格,我试过这个:

dbadmin=> \set table_name 'select to_char(current_date, \'yyMMdd \')'
dbadmin=> :table_name;

to_char
---------
150515
(1 row)

然后尝试从设置的参数:table_name 中创建具有表名的表,但得到了这个

dbadmin=> create table :table_name(col1 varchar(1));
ERROR 4856: Syntax error at or near "select" at character 14
LINE 1: create table select to_char(current_date, 'yyMMdd ')(col1 va...

有没有一种方法可以让我将一个值存储在一个变量中,然后将该变量用作表名,或者分配内部 select 语句首先执行的优先级,以便给我所需的名称。

请推荐!!!

【问题讨论】:

  • 使用 shell 脚本设置外部过程可能更容易。

标签: variables vertica vsql


【解决方案1】:

试试这个

  • 出于某种原因,存储的变量带有一些 空格,我不得不将其删除,也无法开始命名表以数字开头,所以我不得不在其中添加一些内容像 tbl_
  • 这样的形式
  • 简而言之,您只需要存储出口的值,因此您需要做一些额外的工作并执行查询。

    \set table_name `vsql -U dbadmin -w d -t -c "select concat('tbl_',replace(to_char(current_date, 'yyMMdd'),' ',''))"`
    

创建表:

create table :table_name(col1 varchar(1));
(dbadmin@:5433) [dbadmin] *> \d tbl_150515
Schema      | public
Table       | tbl_150515
Column      | col1
Type        | varchar(1)
Size        | 1
Default     |
Not Null    | f
Primary Key | f
Foreign Key |

【讨论】:

    猜你喜欢
    • 2011-11-21
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2011-02-23
    • 2017-08-19
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    相关资源
    最近更新 更多