【问题标题】:Create table/column if not exists for DB2 - Not using a sp, just manual query如果 DB2 不存在,则创建表/列 - 不使用 sp,仅手动查询
【发布时间】:2020-07-12 07:58:24
【问题描述】:

我尝试使用 SQL 语法:

CREATE TABLE IF NOT EXISTS PWRNTCDT.customers_contacts(
    customer_id varchar(10) NOT NULL DEFAULT '',
  contact_index INT NOT NULL,
  is_primary SMALLINT NOT NULL,
  f_name varchar(40) DEFAULT NULL,
  l_name varchar(40) DEFAULT NULL,
  job_title varchar(60) DEFAULT NULL,
  phone varchar(30) DEFAULT NULL,
  mobile varchar(30) DEFAULT NULL,
  email varchar(254) DEFAULT NULL
);

我收到一个错误,表明“存在”部分存在语法错误。 在网上找不到任何东西。 谢谢!

【问题讨论】:

  • 您尝试了哪个代码,遇到了哪个错误?
  • @GMB 我用更多信息编辑了这个问题。谢谢!
  • 您的问题被 2 个不同的 db2 平台标记。他们有不同的能力。您的确切 db2 平台和版本是什么?

标签: sql create-table db2-400


【解决方案1】:

在 DB2 for IBM i 中没有这样的 CREATE TABLE 功能。
CREATE OR REPLACE,但没有CREATE IF NOT EXISTS
请参阅文档中的CREATE TABLE 语句描述。

但你可以使用Dynamic compound statement

-- Use some another statement terminator in your tool you run this statement from like "@" as below
-- Or don't use this statement terminator at all, if you run the statement from some external program
BEGIN
  IF NOT EXISTS
  (
  SELECT 1 
  FROM QSYS2.SYSTABLES
  WHERE TABLE_SCHEMA='PWRNTCDT' AND TABLE_NAME='CUSTOMER_CONTACTS'
  ) THEN

  CREATE TABLE PWRNTCDT.customers_contacts
  (
  customer_id varchar(10) NOT NULL DEFAULT '',
  contact_index INT NOT NULL,
  is_primary SMALLINT NOT NULL,
  f_name varchar(40) DEFAULT NULL,
  l_name varchar(40) DEFAULT NULL,
  job_title varchar(60) DEFAULT NULL,
  phone varchar(30) DEFAULT NULL,
  mobile varchar(30) DEFAULT NULL,
  email varchar(254) DEFAULT NULL
  );

  END IF;
END@

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 2015-10-26
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-07-17
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多