行,我有以下文件:AWK - 剝離出來的DDL
CREATE TABLE "DB2INST1 "."EMAIL_ADDRESS" (
"EMAIL_ADDRESS_ID" INTEGER NOT NULL ,
"PERSON_ID" INTEGER ,
"EMAIL_ADDRESS" VARCHAR(128) NOT NULL ,
"CC_ADDRESS" VARCHAR(128) ,
"UPPER_EMAIL_ADDRESS" VARCHAR(128) GENERATED ALWAYS AS (UPPER(EMAIL_ADDRESS)) ,
IN "USERSPACE5" INDEX IN "IDXSPACE5" LONG IN "LONGSPCE1" ;
CREATE TABLE "DB2INST "."FIELD_RESPONSE" (
"FIELD_RESPONSE_ID" INTEGER NOT NULL ,
"CUSTOM_FIELD_ID" INTEGER ,
"NAME" VARCHAR(100) NOT NULL ,
"RESPONSE" VARCHAR(100) ,
"RESPONSE_LONG" CLOB(256000) LOGGED NOT COMPACT ,
"FIELD_RESPONSE_100" VARCHAR(100) GENERATED ALWAYS AS (case when RESPONSE is null or RESPONSE = '' then cast(RESPONSE_LONG as varchar(100)) else RESPONSE end) ,
COMPRESS YES
DATA CAPTURE CHANGES
IN "USERSPACE1" INDEX IN "IDXSPACE1" LONG IN "LONGSPCE1" ;
我可以使用下面的AWK命令剝離出每個這些記錄了DDL的:
awk '/^CREATE TABLE/ {print}' FS="\n" RS="" <src.ddl> tables.ddl
現在,我正嘗試刪除GENERATED ALWAYS以及之後的所有內容。我想這個文件,看起來像這樣(END RESULT):
CREATE TABLE "DB2INST1 "."EMAIL_ADDRESS" (
"EMAIL_ADDRESS_ID" INTEGER NOT NULL ,
"PERSON_ID" INTEGER ,
"EMAIL_ADDRESS" VARCHAR(128) NOT NULL ,
"CC_ADDRESS" VARCHAR(128) ,
"UPPER_EMAIL_ADDRESS" VARCHAR(128) ,
IN "USERSPACE5" INDEX IN "IDXSPACE5" LONG IN "LONGSPCE1" ;
CREATE TABLE "DB2INST "."FIELD_RESPONSE" (
"FIELD_RESPONSE_ID" INTEGER NOT NULL ,
"CUSTOM_FIELD_ID" INTEGER ,
"NAME" VARCHAR(100) NOT NULL ,
"RESPONSE" VARCHAR(100) ,
"RESPONSE_LONG" CLOB(256000) LOGGED NOT COMPACT ,
"FIELD_RESPONSE_100" VARCHAR(100) ,
COMPRESS YES
DATA CAPTURE CHANGES
IN "USERSPACE1" INDEX IN "IDXSPACE1" LONG IN "LONGSPCE1" ;
我試圖在
|awk '{print $1 " " $2 ", " }' < tables.ddl ...
但是使用這種AWK,只打印出兩列數據。
有什麼建議嗎?
這解決方案非常接近。但是,它不保留列名,數據類型和逗號。 – BennyMinVA
你是什麼意思?它會得到''UPPER_EMAIL_ADDRESS'VARCHAR(128)GENERATED ALWAYS AS(UPPER(EMAIL_ADDRESS)),'並返回''UPPER_EMAIL_ADDRESS「VARCHAR(128),',就像你在問題中所問的那樣......我認爲這是需求,不是嗎? – fedorqui
這是美麗的工作!!!!!!!! – BennyMinVA