Попытка переместить данные из NVARCHAR в TEXT в HANA - PullRequest
0 голосов
/ 08 октября 2019

Столбцом в базе данных SAP HANA был NVARCHAR, и мы расширили его до максимума, но не поняли, что нам нужно заменить его полем TEXT (NCLOB).

Я знаю, что это не 'Это возможно с помощью простой таблицы изменений, поэтому я использую столбец Добавить, скопировать данные, удалить столбец, переименовать шаблон столбца, чтобы сделать это.

На втором этапе, хотя я столкнулся с проблемой. Я получил позорное: SAP DBTech JDBC: [7]: feature not supported: cannot support non-constant types

Поиск дал мне этот ответ .

Так что я попытался сделать это так:

UPDATE "DLN1" as "T1" SET "U_ITCO_OGPID_A" = ( SELECT TO_NCLOB("U_ITCO_OGPID") as "U_ITCO_OGPID_A" FROM "DLN1" as "T2" WHERE "T1"."DocEntry" = "T2"."DocEntry" AND "T1"."LineNum" = "T2"."LineNum" );

Но он выдает ошибку с тем же сообщением об ошибке.

Есть ли что-то еще, что я могу попробовать?

Описание столбцов:

 ;SCHEMA_NAME   ;TABLE_NAME;TABLE_OID;COLUMN_NAME   ;POSITION;DATA_TYPE_ID;DATA_TYPE_NAME;OFFSET;LENGTH       ;SCALE;IS_NULLABLE;DEFAULT_VALUE;COLLATION;COMMENTS;MAX_VALUE;MIN_VALUE;CS_DATA_TYPE_ID;CS_DATA_TYPE_NAME;DDIC_DATA_TYPE_ID;DDIC_DATA_TYPE_NAME;COMPRESSION_TYPE;INDEX_TYPE;COLUMN_ID;PRELOAD;GENERATED_ALWAYS_AS;HAS_SCHEMA_FLEXIBILITY;FUZZY_SEARCH_INDEX;FUZZY_SEARCH_MODE;MEMORY_THRESHOLD;LOAD_UNIT;GENERATION_TYPE;IS_CACHABLE;IS_CACHE_KEY;ROW_ORDER_POSITION
1;ZZ_SEPTOB_TEST;DLN1      ;3 164 003;U_ITCO_OGPID  ;297     ;-9          ;NVARCHAR      ;2 120 ;100          ;?    ;TRUE       ;?            ;         ;?       ;?        ;?        ;83             ;STRING           ;32               ;INVALID            ;DEFAULT         ;NONE      ;3 164 300;FALSE  ;?                  ;FALSE                 ;FALSE             ;?                ;?               ;COLUMN   ;?              ;FALSE      ;FALSE       ;?                 
2;ZZ_SEPTOB_TEST;DLN1      ;3 164 003;U_ITCO_OGPID_A;306     ;-10         ;TEXT          ;1 624 ;2 147 483 647;?    ;TRUE       ;?            ;         ;?       ;?        ;?        ;86             ;TEXT             ;32               ;INVALID            ;DEFAULT         ;NONE      ;3 668 609;TRUE   ;?                  ;FALSE                 ;FALSE             ;?                ;?               ;COLUMN   ;?              ;FALSE      ;FALSE       ;?

С наилучшими пожеланиями,

Leif

1 Ответ

0 голосов
/ 25 октября 2019

То, что вы хотите, возможно сделать обоими способами с простым ОБНОВЛЕНИЕМ и с ALTER, поэтому, пожалуйста, проверьте синтаксис в вашем коде

Я создал простой пример для вас

CREATE COLUMN TABLE aa (a_char NVARCHAR(10), a_clob NCLOB);
INSERT INTO aa (a_char) VALUES ('1');

--  simple update
UPDATE aa SET a_clob = TO_NCLOB(a_char);

-- alter from NVARCHAR to NCLOB
ALTER TABLE aa ALTER (a_char NCLOB);
...