【问题标题】:Groovy + Oracle sql, how to create a table and pass variables at same timeGroovy + Oracle sql,如何同时创建表和传递变量
【发布时间】:2023-03-31 07:25:01
【问题描述】:

大家晚上好。

我正在使用 groovy java,我正在尝试在 oracle 数据库中创建一个表。

我知道我可以分两次做到这一点。 首先,创建表,然后插入来自我的 Array 输出的变量。

这是我的数组:

[[Paulo, Alves, Ducati, 33, London, Valentino Rossi]]

这是我的桌子:

// sql scriptcreates a table
        def createTableScript = """
            CREATE TABLE MOTOGP(
                 FIRST_NAME VARCHAR(50),
                 LAST_NAME VARCHAR(50),
                 AGE NUMBER,
                 ADDRESS VARCHAR(50),
                 ALIAS VARCHAR(50)
            )"""
        // execute the create table script
        sql.execute(createTableScript);

我想在创建的同时将我的变量或 Arry 对象传递给表。有可能吗?

提前谢谢你!

【问题讨论】:

  • 不,不是,至少按照您的建议。使用CREATE TABLE AS {SELECT STATEMENT} 是可能的,但这似乎不是一种干净的方式。
  • 顺便说一句,试图存储“年龄”是一个严重的设计缺陷。 “年龄”在不断增加,因此需要不断更新。而不是存储某人(或 some_thing_)的年龄,而是存储计算“年龄”的日期。对于一个人的“年龄”,您应该存储出生日期。并且在存储日期时,将数据类型声明为 DATE。然后,您在查询数据时始终可以计算出正确的日期。

标签: sql oracle groovy insert


【解决方案1】:

我不知道 Groovy,但是 - 根据您的描述 - 您正在寻找的可能是 CTAS(将表创建为选择)。在 Oracle 中,它看起来像这样:

SQL> create table motogp as
  2    select cast('Paulo'            as varchar2(20)) first_name,
  3           cast('Alves'            as varchar2(20)) last_name,
  4           33 age,
  5           cast('London'           as varchar2(20)) address,
  6           cast('Valentino Rossi'  as varchar2(20)) alias
  7    from dual;

Table created.

SQL>

那么结果是:

SQL> desc motogp
 Name                          Null?    Type
 ----------------------------- -------- --------------------
 FIRST_NAME                             VARCHAR2(20)
 LAST_NAME                              VARCHAR2(20)
 AGE                                    NUMBER
 ADDRESS                                VARCHAR2(20)
 ALIAS                                  VARCHAR2(20)

SQL> select * From motogp;

FIRST_NAME           LAST_NAME                   AGE ADDRESS              ALIAS
-------------------- -------------------- ---------- -------------------- --------------------
Paulo                Alves                        33 London               Valentino Rossi

SQL>

注意CASTs 我用过;没有它,表的列的长度将等于当前列值和不同的数据类型(CHAR 而不是VARCHAR2),这可能不是您想要的。例如:

SQL> create table motogp as
  2    select 'Paulo' first_name
  3    from dual;

Table created.

SQL> desc motogp;
 Name                          Null?    Type
 ----------------------------- -------- --------------------
 FIRST_NAME                             CHAR(5)

SQL>

现在,如何在 Groovy 中做到这一点,不知道;我希望这足以让您入门。

【讨论】:

    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2015-02-08
    • 2018-11-28
    • 2020-02-06
    • 1970-01-01
    相关资源
    最近更新 更多