Db2 для эмуляции I: Cpyf * nochk - PullRequest
1 голос
/ 11 октября 2019

В системе IBM i есть способ скопировать из структурированного файла в файл без структуры, используя Cpyf *nochk.

Как это можно сделать с помощью sql?

Ответы [ 3 ]

1 голос
/ 11 октября 2019

Ответом может быть «Вы не можете», если вы все равно используете таблицы, определенные DDL. Проблема в том, что *NOCHK просто сбрасывает данные в файл как плоский файл. Файлы, определенные с помощью CRTPF, независимо от того, имеют ли они источник или определены программой, не заботятся о плохих данных до момента чтения, поэтому они могут содержать неверные данные. На самом деле вы можете даже прочитать неверные данные из файла, если вы используете определение программы для этого файла.

Но таблица SQL (определенная с использованием DDL) не может содержать неверные данные. Независимо от того, как вы пишете, база данных проверяет данные во время записи. Даже опция *NOCHK команды CPYF не может принудительно преобразовать неверные данные в таблицу SQL.

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

Вы можете использовать хранимую процедуру QSYS2.QCMDEXC для выполнения команд ОС.

Пример:

call qsys2.qcmdexc ('CPYF FROMFILE (QTEMP / FILE1) TOFILE (QTEMP / FILE2) MBROPT(* заменить) FMTOPT (* NOCHK) ')

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

Там действительно нет простого способа

Ближайшим было бы просто построить большую строку символов, используя CONCAT ...

insert into flatfile
 select mycharfld1
        concat cast(myvchar as char(20))
        concat digits(zonedFld3)
  from mytable

Это работает для фиксированной длины, varchar (еслиприведено к типу char) и зонированному десятичному знаку ...

Упакованный десятичный знак будет проблематичным ..

Я видел пользовательские функции, которые могут возвращать строку двоичных символов, составляющую упакованный десятичный знак. ..но это очень некрасиво

Я спрашиваю, почему вы думаете, что вам нужно это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...