(转)SQLデータ型

https://www.microfocus.co.jp/manuals/VisCob2010R2/BKDBDBDTYP.html

SQLデータ型

SQL データ型は、COBOL で使用されるデータ形式と異なります。

SQL には一連の標準データ型がありますが、実際の実装状況はデーベースによって異なり、これらのデータ型をすべて実装するデータベースはほとんどありません。

データ型の変換

COBOL プログラム内では、ホスト変数は COBOL プログラム変数としてのみでなく、SQL データベース変数としても機能するため、プリプロセッサにより COBOL データ形式を適切な SQL データ型に変換したり、マップしたりする必要があります。つまり、プリプロセッサが COBOL データ形式を正しい SQL データ型にマップするように、ホスト変数を正しい COBOL PICTURE 句で宣言する必要があります。これを行うには、接続するデータソースで使用される SQL データ型を把握しておくことが必要です。

以降では、さまざまな SQL データ型と、直接それらにマップするホスト変数の宣言方法について説明します。

COBSQL プリプロセッサ

COBSQL で Sybase、Informix、または Oracle を使用している場合は、データベースエンジンで変換の一種を行って、COBOL データ形式からデータベースのデータ型にデータを変換できます。通常、数字または整数データ形式のホスト変数は、次のように定義します。

PIC S9(..)..COMP..

文字またはテキストデータ形式は、次のように定義します。

PIC X(...).

Oracle と Sybase では、データベースデータ型を特定のホスト変数に定義できます。これは、より複雑なデータ型が使用される場合に便利です。

Oracle

Oracle では、次のように記述します。

 EXEC SQL
     BEGIN DECLARE SECTION 
 END-EXEC.
*
* データ項目を Oracle データ型の DISPLAY として定義します。
*
 01 emp-comm pic s9(6)v99 DISPLAY SIGN LEADING SEPARATE
*   
 EXEC SQL
     VAR emp-comm IS DISPLAY(8,2)
 END-EXEC.
 EXEC SQL
     END DECLARE SECTION
 END-EXEC.

Sybase

Sybase では、次のように記述します。

 EXEC SQL
     BEGIN DECLARE SECTION
 END-EXEC.
*
* データ項目を Sybase 固有のデータ型として定義します。
*
 01 money-item CS-MONEY.
*
 EXEC SQL
     END DECLARE SECTION
 END-EXEC.

ホスト変数のデータベース型定義の詳細は、各データベースベンダが提供している COBOL プリコンパイラマニュアルを参照してください。

Informix

Informix では、さまざまなデータ型を操作するために呼び出すことができるシステムルーチンが多数提供されています。これらのルーチンの詳細は、『Programming with INFORMIX-ESQL/COBOL』マニュアルを参照してください。

整数データ型

TINYINT

TINYINT は、SQL の 1 バイトの整数データ型です。COBOL では次のように宣言されます。

PIC S9(2) COMP-5.

DB2

DB2 では TINYINT データ型をサポートしていません。

COBSQL

Sybase では、TINYINT ホスト変数の使用をサポートしています。Sybase では次のように定義されます。

03 tinyint1     PIC S9(2) COMP-5.
03 tinyint2     PIC S9(2) COMP.
03 tinyint3     PIC S9(2) BINARY.

これらは、Sybase データ型 TINYINT にマップされます。

OpenESQL

SQL(DBMAN=ODBC) 指令でコンパイルする場合は、OpenESQL では TINYINT データ型をサポートしていません。かわりに SMALLINT を使用してください。

SMALLINT

SMALLINT は、SQL の 2 バイトの整数データ型です。COBOL では、BINARY、COMP、COMP-X、COMP-5、または COMP-4 の用途で宣言されます。

たとえば、次の定義はすべて、ホスト変数が直接 SMALLINT データ型にマップされます。

03 shortint1      PIC S9(4)  COMP.
03 shortint2      PIC S9(4)  BINARY.
03 shortint3      PIC X(2)   COMP-5.
03 shortint4      PIC S9(4)  COMP-4.
03 shortint5      PIC 9(4)   USAGE DISPLAY.
03 shortint6      PIC S9(4)  USAGE DISPLAY.

OpenESQL

 

  • OpenESQL では現在、符号付き SMALLINT をサポートしていますが、符号なし SMALLINT はサポートしていません。
  • 最も効率よくアクセスするためには、SMALLINT を COMP-5 として宣言する必要があります。

COBSQL - Oracle

Oracle では、ホスト変数を shortint1、shortint2、または次のように定義するのが最良の方法です。

03 shortint7     PIC S9(4) COMP-5.

これらは、Oracle データ型 NUMBER(38) にマップされます。

COBSQL - Sybase

Sybase では、shortint3 以外はすべて受け入れられます。使用できる方法は、次のとおりです。

03 shortint7     PIC S9(4) COMP-5.

これらは、Sybase データ型 SMALLINT にマップされます。

COBSQL - Informix

Informix では、ホスト変数を shortint1、shortint2、または次のように定義するのが最良の方法です。

03 shortint7     PIC S9(4) COMP-5.

これらは、Informix データ型 SMALLINT にマップされます。

INT

INT は、SQL の 4 バイトの整数データ型です。COBOL では、BINARY、COMP、COMP-X、COMP-5、または COMP-4 の用途で宣言されます。

次の定義は、ホスト変数を直接 INT データ型にマップされます。

03 longint1      PIC S9(9)  COMP.
03 longint2      PIC S9(9)  COMP-5.
03 longint3      PIC X(4)   COMP-5.
03 longint4      PIC X(4)   COMP-X.
03 longint5      PIC 9(9)   USAGE DISPLAY.
03 longint6      PIC S9(9)  USAGE DISPLAY.

OpenESQL

 

  • 現在 OpenESQL は、符号付き INT をサポートしていますが、符号なし INT はサポートしていません。
  • 最も効率よくアクセスするためには、INT を COMP-5 として宣言する必要があります。

COBSQL - Oracle

Oracle では、整数型のホスト変数を longint1、longint2、または次のように定義するのが最良の方法です。

03 longint7     PIC S9(9) COMP-5.

これらは、Oracle データ型 NUMBER(38) にマップされます。

COBSQL - Sybase

Sybase では、longint3 以外はすべて受け入れられます。使用できる方法は、次のとおりです。

03 longint7     PIC S9(9) COMP-5.

これらは、Sybase データ型 INT にマップされます。

COBSQL - Informix

Informix では、整数型のホスト変数を longint1、longint2、または次のように定義するのが最良の方法です。

03 longint7     PIC S9(9) COMP-5.

これらは、Informix データ型 INT にマップされます。

BIGINT

BIGINT は、SQL の 8 バイトの整数データ型です。COBOL では次のように宣言されます。

PIC S9(18) COMP-3.

OpenESQL

OpenESQL では、ホスト変数として使用される COBOL データ項目に S9(18) という最大サイズをサポートして、SQL データ型 BIGINT からマップされた値を保持します。ただし、BIGINT データ型は、PIC S9(18) データ項目の最大値以上の値を格納できます。そのため、データ切り捨てに対するコード検査が必要です。

DB2

BIGINT データ型は、DB2 UDB V6.1 以降でサポートされます。

COBSQL

Oracle、Informix、および Sybase では、BIGINT をサポートしていません。

文字データ型

CHAR

固定長文字列 (CHAR) は、ドライバによって最大長が定義された SQL データ型です。COBOL では PIC X(n) と宣言します。n は、1 から最大長までの整数です。

たとえば、次のように記述します。

03 char-field1      pic x(5).
03 char-field2      pic x(254).

COBSQL

これは、Oracle データ型 CHAR(n)、Sybase データ型 CHAR(n)、および Informix データ型 CHAR(n) にマップします。Oracle または Sybase の場合に、サポートされる固定長文字列の最大長は 255 バイトです。Informix の場合に、サポートされる固定長文字列の最大長は 32KB です。

DB2

これは、DB2 データ型 CHAR にマップされます。サポートされる固定長文字列の最大長は 254 バイトです。254 バイトを超える長さの文字列が必要な場合は、VARCHAR フィールドを使用してください。

VARCHAR

OpenESQL

OpenESQL を使用する場合は、長さフィールドを COMP-5 として宣言する必要があります。

OpenESQL および DB2

可変長文字列 (VARCHAR) は、SQL データ型です。COBOL では、次の 2 通りで宣言できます。

  • 固定長文字列 (PIC X(n)).
  • レベル-49 の基本項目 2 つのみを含む集団項目。最初の項目は、2 バイトのフィールドで有効な文字列の長さを示す COMP または COMP-5 の用途で宣言します。もう 1 つの項目は PIC X(n) データ形式で宣言し、実際のデータを格納します。n は、整数です。

    次に宣言例を示します。

    03 varchar1.
       49 varchar1-len        pic 9(4) comp.
       49 varchar1-data       pic x(200).
    03 Longvarchar1.
       49 Longvarchar1-len    pic 9(4) comp-5.
       49 Longvarchar1-data   pic x(30000).

    SQL 文では、集団名を参照する必要があります。

SQL の CHAR、VARCHAR、または LONG BARCHAR データ型にコピーされたデータが、これらのデータ型に定義された長さを超える場合には、データが切り捨てられ、SQLCA データ構造体の SQLWARN1 フラグが設定されます。また、定義されたデータ長より短い文字列には、受け取った CHAR データ型に空白文字が付加されます。

COBSQL - Oracle

Oracle では、ホスト変数は Oracle キーワード VARYING を使用して定義されます。次に使用例を示します。

 EXEC SQL
     BEGIN DECLARE SECTION
 END-EXEC.
 01 USERNAME     PIC X(20) VARYING.
 EXEC SQL
     END DECLARE SECTION
 END-EXEC.

Oracle は、データ項目 USERNAME を次のような集団項目に展開します。

 01 USERNAME
    02 USERNAME-LEN     PIC S9(4) COMP-5.
    02 USERNAME-ARR     PIC X(20).

COBOL コード内では、USERNAME-LEN または USERNAME-ARR のどちらかを参照する必要がありますが、SQL 文内では集団名 USERNAME を使用する必要があります。次に例を示します。

     move "SCOTT" to USERNAME-ARR.
     move 5 to USERNAME-LEN.
     exec sql
         connect :USERNAME identified by :pwd
          using :db-alias
     end-exec.

これは Oracle データ型 VARCHAR(n) または VARCHAR2(n) にマップされます。非常に長い文字項目については、Oracle はデータ型 LONG を提供しています。

COBSQL - Sybase

Sybase では、ホスト変数を PIC X(n) PICTURE 句を使用して宣言する必要があります。これは、Sybase プリコンパイラが、VARCHAR SQL データ型を処理する集団項目の使用をサポートしないためです。

これらは、Sybase データ型 VARCHAR(n) にマップされます。

COBSQL - Informix

Informix では、ホスト変数を PIC X(n) PICTURE 句を使用して宣言する必要があります。これは、Informix プリコンパイラが、VARCHAR SQL データ型を処理する集団項目の使用をサポートしていないためです。

これらは、Informix データ型 VARCHAR(n) にマップされます。VARCHAR フィールドの最大長は、使用している Informix のバージョンによって異なります。VARCHAR データ項目の詳細は、『Informix SQL ガイド』のマニュアルを参照してください。

Unicode

OpenESQL では、PIC N(n) フィールドを使用して Unicode データ型をサポートします。詳細は、『OpenESQL』の章にある『OpenESQL の Unicode サポート』およびヘルプトピックの『SQL/COBOL データ型マッピング』を参照してください。

概数データ型

32 ビット SQL 浮動小数点データ型の REAL は、COBOL では COMP-1 として宣言します。

64 ビット SQL 浮動小数点データ型の FLOAT と DOUBLE は、COBOL では COMP-2 として宣言します。

次に宣言例を示します。

01 float1      usage comp-2.

OpenESQL

OpenESQL では埋め込み SQL の単精度浮動小数点数がサポートされないため、32 ビットおよび 64 ビットの浮動小数点データ型は COMP-2 COBOL データ項目にマップされます。

DB2

 

  • DB2 ユニバーサルデータベースでは、単精度浮動小数点数 (REAL) を COMP-1 として、倍精度浮動小数点数 (FLOAT または DOUBLE) を COMP-2 としてサポートします。
  • DB2 バージョン 2.1 では、倍精度浮動小数点数 (FLOAT または DOUBLE) のみ COMP-2 としてサポートします。

COBSQL - Oracle

Oracle は、COMP-1 データ項目および COMP-2 データ項目の使用をサポートしています。これらはどちらも、Oracle データ型 NUMBER にマップされます。

COBSQL - Sybase

Sybase は、COMP-1 データ項目および COMP-2 データ項目の使用をサポートしています。COMP-1 データ項目は、Sybase データ型 REAL にマップされます。COMP-2 データ項目は、Sybase データ型 FLOAT にマップされます。

COBSQL - Informix

Informix は COMP-1 データ項目と COMP-2 データ項目のどちらもサポートしていません。Informix は、COBOL の固定数字データ項目 PIC S9(m)V9(n) のみサポートしています。Informix では、FLOAT カラムと SMALLFLOAT SQL カラムがこの形式に変換されます。

真数データ型

真数データ型 DECIMAL および NUMERIC には、ドライバで指定された精度と位取りで値を格納できます。

COBOL では、これらは COMP-3、PACKED-DECIMAL、または NUMERIC USAGE DISPLAY として宣言されます。

次に宣言例を示します。

03 packed1      pic s9(8)v9(10) usage comp-3.
03 packed2      pic s9(8)v9(10) usage display.

COBSQL - Oracle

Oracle では、これらはデータ型 NUMBER(p,s) にマップされます。Sybase では、NUMBER(p,s) または DECIMAL(p,s) にマップされます。Informix では、DECIMAL(p,s) または MONEY(p,s) にマップされます。

  • NUMERIC データ型と DECIMAL データ型の相違については、『Sybase Transact-SQL ユーザーズ・ガイド』の『データ型の作成と使用方法』の章を参照してください。
  • DECIMAL データ型と MONEY データ型の相違については、『Informix SQL ガイド』の『データ型』の章を参照してください。

日時データ型

COBOL には、日付データや時刻データ専用のデータ形式はありません。そのため、SQL の日付カラムや時刻カラムは文字列に変換されます。

SQL タイムスタンプ値に対して COBOL で出力するホスト変数を PIC X(n) と定義した場合には、日付と時刻は yyyy-mm-dd hh:mm:ss.ff の形式で指定されます。この場合には、n は 19 以上の整数です。また、小数部の桁数はドライバで指定されます。

たとえば、次のようになります。

1994-05-24 12:34:00.000

OpenESQL

OpenESQL は、どのリレーションナルデータベースにもアクセスでき、各データベースには日付や時刻を指定するさまざまな方法があるため、通常は、入力ホスト変数で日付や時刻を指定します。この方法を使用する場合は、プログラムのコンパイル時に SQL 指令で DETECTDATE オプションを使用する必要があります。

  • 日付を指定するには、日付を {dyyyy-mm-dd} の形式でホスト変数に転記します。
  • 時刻を指定するには、時刻を {thh:mm;ss} の形式でホスト変数に転記します。
  • 日付と時刻を指定するには、日付と時刻を {tsyyyy-mm-dd hh:mm:ss} の形式でホスト変数に転記します。

たとえば、次のように記述します。

$set sql(dbman=odbc, detectdate) 
 01 Hire-Date pic x(26).
  . . . 
     move "{d'1965-11-02'} to Hire-Date 
     exec sql 
         insert into emp (HireDate) values (:Hire-Date) 
     end-exec 
DB2

DB2 では、TIMESTAMP データ型の最大長は 26 文字です。

COBSQL

Oracle

Oracle データ項目には一意なデータ定義があり、これらのデータ項目を COBOL プログラム内で使用したときに、日付、時刻および日時フィールドを変換する関数があります。これらの関数は、次のとおりです。

  • TO_CHAR

    Oracle の日付形式を文字列に変換します。

  • TO_DATE

    文字列を Oracle の日付に変換します。

どちらの関数も変換する項目を引数にとり、その後にデータ項目に適用される日付、時刻、または日時マスクが続きます。次に例を示します。

exec sql
   select ename, TO_CHAR(hiredate, 'DD-MM-YYYY')
      from emp
      into :ename, :hiredate
      where empno = :empno
end-exec.

exec sql
  insert into emp (ename, TO_DATE(hiredate, 'DD-MM-YYYY'))
          values   (:ename, :hiredate)
end-exec.

これは、Oracle データ型 DATE にマップされます。DATE データ型の詳細は、Oracle の『SQL 言語リファレンスマニュアル』を参照してください。このマニュアルでは、Oracle SQL 文内でのこれらの関数の使用方法について詳しく説明されています。

Sybase

Sybase には、データ型の形式を変換する、convert という名前の関数があります。前述の Oracle 例を使用する場合には、SQL 構文は次のようになります。

exec sql
   select ename, convert(varchar(12) hiredate, 105)
      from emp
      into :ename, :hiredate
      where empno = :empno
end-exec.

exec sql
   insert into emp (ename, hiredate)
          values   (:ename, convert(datetime :hiredate, 105)
end-exec.

これは、Sybase データ型 SMALLDATETIME または DATETIME にマップされます。SMALLDATETIME データ型と DATETIME データ型の相違については、『Sybase Transact-SQL ユーザーズ・ガイド』の『データ型の作成と使用方法』の章を参照してください。

Sybase の convert 関数の詳細は、Sybase の『SQL Server Reference Manual: Volume 1 Commands, Functions and Topics』を参照してください。

Informix

Informix では、日付はユリウス形式または mm/dd/yyyy 形式のどちらかを要求します。

  • ユリウス日付を使用する場合は、フィールドを PIC S9(9) COMP として定義してください。
  • mm/dd/yyyy 形式で日付を表す場合は、次のようにします。
    • COBOL フィールドを PIC X(10) として定義します。
    • DATE_TYPE 関数を使用します。

Informix に日付を渡す方法については、『INFORMIX-ESQL/COBOL Programmer's Manual』を参照してください。

バイナリデータ型

OpenESQL

SQL の BINARY、VARBINARY、および IMAGE データは、COBOL では PIC X (n) フィールドとして表されます。データの変換は実行されません。データベースからデータを取り込むときに、データのサイズが格納先の COBOL フィールドよりも大きい場合は、フィールドに格納できない部分のデータは切り捨てられ、SQLCA データ構造体の SQLWARN1 フィールドに「W」が設定されます。また、データ長が COBOL フィールドよりも短い場合は、フィールドの空き部分に NULL 文字 (x"00") が付加されます。BINARY、VARBINARY、または LONG VARBINARY カラムにデータを挿入するには、動的 SQL 文を使用します。

DB2

DB2 では、BINARY を表すには CHAR FOR BIT DATA、VARBINARY を表すには VARCHAR(n) FOR BIT DATA、LONG VARBINARY を表すには LONG VARCHAR FOR BIT DATA を使用します。IBM ODBC ドライバを使用している場合は、IBM 互換データ型のかわりに、BINARY、VARBINARY、および LONG VARBINARY が戻されます。IMAGE データ型は、BLOB で表されます。DB2 では、非常に大きいカラム (最大 2GB) を定義するために、LOB (文字型ラージオブジェクト、バイナリ型ラージオブジェクトまたはグラフィック型ラージオブジェクト) を使用します。これらのデータ型には静的 SQL を使用できます。

COBSQL

Oracle

Oracle では、バイナリデータをサポートしています。Oracle でのバイナリデータと文字データの相違は、文字データには文字符号系変換が行われますが、バイナリデータには何も行われないという点です。

これらの Oracle データ型は RAW と LONG RAW の 2 つです。RAW および LONG RAW の使用には制約があります。詳細は、Oracle のマニュアルを参照してください。

Sybase

Sybase には、BINARY、VARBINARY、および IMAGE の 3 つのバイナリデータ型があります。IMAGE は、複雑なデータ型であるため、ホスト変数は CS-IMAGE として定義できます。たとえば、次のように記述します。

 EXEC SQL
     BEGIN DECLARE SECTION
 END-EXEC.
*
* データ項目を Sybase 固有のデータ型として定義します。
*
 01 image-item     CS-IMAGE.
*
 EXEC SQL
     END DECLARE SECTION 
 END-EXEC.

注:Sybase データ型 BINARY、VARBINARY、および IMAGE の使用については、『Sybase Transact-SQL ユーザーズ・ガイド』の『データ型の作成と使用方法』の章を参照してください。

Informix

Informix では、TEXT と BYTE の 2 種類のバイナリデータ項目がサポートされます。これらのデータ型には実際のデータは格納されません。これらは、ファイル名です。このため、COBOL の対応項目は PIC X(n) になります。

TEXT および BYTE データ項目の詳細は、『Informix SQL ガイド』を参照してください。

OpenESQL SQL TYPE

OpenESQL を使用しない場合や、他の ESQL プリプロセッサとの互換性を維持するには、ここを飛ばしてもかまいません。それ以外の場合は、ここで説明する SQL TYPE を使用することをお奨めします。

日付 / 時刻のデータやバイナリデータに関連する SQL データを処理するときに、通常の COBOL ホスト変数を使用すると複雑になったり、これまでの方法で可変長文字列のデータを処理すると問題になったりする可能性があることが確認されています。このため、OpenESQL を拡張して、SQL TYPE 関数により、SQL テーブルに格納されるデータ型により密接に影響を与えるホスト変数をより簡単に宣言できるようにしました。これにより、動的 SQL 構文よりも静的 SQL 構文でより多くのアプリケーションを作成できます。

次のデータ型は、SQL TYPE 関数でホスト変数として使用できます。

  • BINARY
  • CHAR-VARYING
  • DATE
  • DATE-RECORD
  • LONG-VARBINARY
  • LONG-VARCHAR
  • TIME
  • TIME-RECORD
  • TIMESTAMP
  • TIMESTAMP-RECORD
  • VARBINARY
BINARY

 

構文:
SQL [TYPE] [IS] BINARY(n)
例:
01 hv-name SQL TYPE IS BINARY(n)

生成後

01 hv-name pic x(n).
CHAR-VARYING

 

構文:
SQL [TYPE] [IS] CHAR-VARYING(n)
一般規則:
  1. CHAR-VARYING データは、OpenESQL に SQL_VARCHAR として渡されます。
  2. データがデータソースに送信されると、値がすべて空白文字の場合は最初の空白文字以外の後続の空白文字は削除されます。
  3. データソースから取り込んだ値には空白文字が付加されます。
例:
01 hv-name SQL TYPE IS CHAR-VARYING(n)

生成後

01 hv-name pic x(n).
DATE

 

構文:
SQL [TYPE] [IS] DATE
一般規則:
  1. DATE データは、YYYY-MM-DD の形式である必要があります。
例:
01 hv-name SQL TYPE IS DATE

生成後

01 hv-name pic x(10).
DATE-RECORD

 

構文:
SQL [TYPE] [IS] DATE-RECORD
例:
01 hv-name SQL TYPE IS DATE-RECORD

生成後

01 hv-name.
  03 hv-name-year   pic s9(4) comp-5.
  03 hv-name-month  pic 9(4) comp-5.
  03 hv-name-day    pic 9(4) comp-5.
TIMESTAMP および TIMESTAMP-RECORD

OpenESQL は、TIMESTAMP カラムデータをより簡単に処理できるように TIMESTAMP および TIMESTAMP-RECORD SQL TYPE をサポートします。TIMESTAMP および TIMESTAMP-RECORD は、固定された日付時刻形式に編成されたデータが必要になります。すべてのタイムスタンプ情報を含む作業場所内の単一のデータ項目として生成するために TIMESTAMP を使用します。次に示すタイムスタンプの各要素用のデータ項目を含む集団項目として生成するために TIMESTAMP-RECORD を使用します。

  • 年
  • 月
  • 日
  • 時
  • 分
  • 秒
  • 小数部の秒
構文:
書き方 1 - TIMESTAMP
SQL [TYPE] [IS] TIMESTAMP
書き方 2 - TIMESTAMP-RECORD
SQL [TYPE] [IS] TIMESTAMP-RECORD
一般規則:
  1. TIMESTAMP データは、YYYY-MM-DD HH:MM:SS の形式である必要があります。
  2. TIMESTAMP-RECORD ホスト変数を使用してデータを挿入するには、生成されたフィールド名内で有効なデータを渡す必要があります。
  3. 小数部の秒は、9 桁までサポートされます。ただし、この値は、DBMS や ODBC ドライバによって異なります。たとえば、Oracle および DB2 UDB では、6 桁までサポートされます。Microsoft SQL Server では、3 桁までです。詳細は、DBMS または ODBC ドライバのマニュアルを参照してください。
  4. 小数部のデータは左桁寄せで渡され、データ項目の定義された桁数に含まれている必要があります。たとえば、678 の小数部の秒値は、9 桁で定義されたデータ項目に 678000000 として渡されます。
  5. SELECT 文または FETCH 文からデータが戻される場合は、小数部の秒は右桁寄せになります。
  6. Oracle を使用している場合は、国や地域によって日付時刻形式が異なるため、Oracle の NLS_TIMESTAMP_FORMAT パラメータで定義します。OpenESQL で定義された形式は、NLS_TIMESTAMP_FORMAT で指定された値と一致する必要があります。

    注:OpenESQL 形式と Oracle の NLS_TIMESTAMP_FORMAT パラメータ値と一致しない場合は、Oracle はエラーメッセージを生成します。NLS_TIMESTAMP_FORMAT の値を確認するためには、Oracle の SQLPLUS ユーティリティを使用します。具体的な操作は次のとおりです。

    • OpenESQL で定義している値を NLS_TIMESTAMP_FORMAT 環境変数に設定します。
    • PIC X(29) のホスト変数を準備し、NLS_TIMESTAMP_FORMAT で定義された形式内の文字列を渡します。
    • 適切な形式を指定するために INSERT 文の TO_TIMESTAMP 関数を使用します。次に例を示します。
      exec sql
         insert into mf_datetime
           (col_a
           ,col_date
           ,col_timestamp
           ) values
          (:mf-col-a
          ,TO_DATE(:mf-col-date, 'YYYY-MM-DD')
          ,TO_TIMESTAMP(:mf-col-timestamp, 'YYYY-MM-DD HH24:MI.SS.FF')
          )
      end-exec

    SQLPLUS ユーティリティおよび NLS_TIMESTAMP_FORMAT パラメータの詳細は、Oracle のマニュアルを参照してください。

  7. SQL Server が日付や時刻の値を格納する場合は、桁によって小数部の最終桁の上下で丸めが発生する可能性があります。次に例を示します。
    渡される値SQL Server から返される値
    01/01/98 23:59.59.9991998-01-02 00:00:00.000
    01/01/98 23:59.59.9951998-01-01 23:59:59.997
    01/01/98 23:59.59.9961998-01-01 23:59:59.997
    01/01/98 23:59.59.9971998-01-01 23:59:59.997
    01/01/98 23:59.59.9981998-01-01 23:59:59.997
    01/01/98 23:59.59.9921998-01-01 23:59:59.993
    01/01/98 23:59.59.9931998-01-01 23:59:59.993
    01/01/98 23:59.59.9941998-01-01 23:59:59.993
    01/01/98 23:59.59.9901998-01-01 23:59:59.990
    01/01/98 23:59.59.9911998-01-01 23:59:59.990
例:
書き方 1 - TIMESTAMP
01 hv-name SQL TYPE IS TIMESTAMP

生成後

01 hv-name pic x(29).
書き方 2 - TIMESTAMP-RECORD
01 hv-name SQL TYPE IS TIMESTAMP-RECORD

生成後

01 hv-name.
   03 hv-name-year   pic s9(4) comp-5.
   03 hv-name-month  pic 9(4) comp-5.
   03 hv-name-day    pic 9(4) comp-5.
   03 hv-name-hour   pic 9(4) comp-5.
   03 hv-name-min    pic 9(4) comp-5.
   03 hv-name-sec    pic 9(4) comp-5.
   03 hv-name-frac   pic 9(9) comp-5.
書き方 1 および 2

ホスト変数の定義:

01  mf.
    03 mf-col-a                       pic s9(09)  comp-5.
    03 mf-col-date                    sql type date.
    03 mf-col-timestamp               sql type timestamp.
    03 mf-col-tsrec                   sql type timestamp-record.
01  ws-char-ts                        pic x(29).

フィールドの初期化:

move 1                 to        mf-col-a
move "2005-03-31"      to        mf-col-date
move "2005-04-15 13:45:56.456123"
     to        mf-col-timestamp
move 2005              to        mf-col-tsrec-year
move 04                to        mf-col-tsrec-month
move 16                to        mf-col-tsrec-day
move 16                to        mf-col-tsrec-hour
move 55                to        mf-col-tsrec-min
move 58                to        mf-col-tsrec-sec
move 678000000         to        mf-col-tsrec-frac

INSERT 文:

   exec sql
     insert into mf_datetime
       (col_a
       ,col_date
       ,col_timestamp
       ) values
       (:mf-col-a
       ,:mf-col-date
       ,:mf-col-timestamp
       )
  end-exec

 

YOLOv8 道路病害检测全栈工程|22 类路面裂缝坑洞 VOC&YOLO 数据集、PyQt 精美 GUI、ONNX 量化、全套训练评估曲线落地 城市道路、国省道、高速公路路面长期受车辆碾压、雨水侵蚀,衍生纵向 / 横向裂纹、坑洼、车辙、接缝剥落等二十余种路面病害。传统人工道路巡检存在致命行业痛点:人工徒步 / 乘车目视巡检效率极低,单日有效巡查里程不足 20 公里;毫米级细微线性裂纹肉眼极易漏检,雨水冲刷后微小病害快速扩张为大坑槽,养护成本翻倍;强光暴晒、阴雨积水、路面油污场景人工分辨难度大;海量巡检图片人工分类统计病害台账耗时数天,养护决策缺乏量化数据支撑。传统阈值、边缘检测图像处理仅能识别大面积坑洞,无法区分二十余种细分裂纹类型,泛化能力极差。 阅读详情

相关推荐

基于STM32的家用新风系统智能控制器 | 保姆式教程 开源可复刻

本项目基于STM32F103C8T6核心控制器,完整实现了家用新风系统智能控制器的全功能开发,覆盖多传感器数据采集、双模式控制、PID调速、异常报警、掉电记忆等核心功能,全程采用保姆式无跳步教学,从硬件选型、接线、CubeMX配置、代码开发、调试排坑全流程拆解,跟着步骤一步步操作,就能顺利完成项目复刻

ZhongWeiXiang9的博客 464

从数据类型 varchar 转换为 numeric 时出错

从数据类型 varchar 转换为 numeric 时出错

weixin_53203830的博客 1268

博图V16与840D sl数控系统PLC编程实战指南

本文为西门子840D sl数控系统的PLC编程实战指南,详细介绍了如何使用博图V16软件配置编程环境。内容涵盖从项目创建、核心程序块(如DB、FB)解析到OB1主循环编程的完整流程,并提供了高级调试技巧与联调避坑指南,帮助工程师快速上手并高效完成系统集成与逻辑控制。

weixin_29193259的博客 527

SQL 保留2位小数的方法/四舍五入

数据库中存在着粘性一列,其数据为1.856899999 现在要将数据四舍五入为2位小数,例如1.86 以下为SQL: CONVERT(decimal(4,2),粘性) 注意: decimal(4,2)代表有4位有效数字,保留2位小数(少于2位补0,多于2位四舍五入),最多有4-2=2位整数数字. 如果转换时出现了 将 float 转换为数据类型 numeric 时出现算术溢出错误 (float ...

Hibiki's Ending 6530

Android系统解决-授予管理所有文件的权限问题

Android版本一直在加,Android9/Android10/Android11/Android12/Android13/Android14/Android15 , 客户app 也在不断适配,但是存在特别是定制产品中,客户不愿意适配,啥问题都让系统解决,绕过一定机制、实现。这里说的就是一个常见的常见需求:Android13 上面,客户要求默认授予管理所有文件的权限,如下:问题是机器重启后这个权限仍需要重新打开才行,那就是每次开机使用某些功能前都需要授权一次。是的ADB对应命令。

十年饮冰,难凉热血 2534

手把手教你用ESP32-S3打造智能聊天机器人-立创实战派

本文将详细介绍如何利用立创ESP32-S3开发板,烧录小智AI程序,快速实现一个功能强大的聊天机器人。

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9911

截取字符串的一些东东

ORACLE 截取字符串文字列の一部を切り出すには、SUBSTR関数またはSUBSTRB関数を使用します。 SUBSTR(文字列 , 開始位置 ) 文字列 の開始位置 から後ろの文字列を返します SUBSTRB(文字列 , 開始位置 )

路漫漫其修远兮 2472

uniapp - 超详细 H5 网页引入百度地图教程,附地图示例 / 获取当前设备定位的省市区、详细地址、经纬度信息 / 用户当前 IP 属地定位地理位置等等(新手小白快速上手,详细配置及使用全流程)

uniapp百度地图,uniapp百度地图ip属地定位,uniapp百度地图获取省市区详细地址经纬度等,uniapp百度地图当前用户设备定位省份市区详细所在地ip属地等详细教程示例,uniapp网页h5引入百度地图详细教程,uniapp h5网站使用百度地图详细教程,uniappH5端如何接入使用百度地图api,uniapp H5网页端百度地图获取地理位置信息,uniapp h5页面引入百度地图,uniapp h5平台百度地图获取城市信息,uniapp百度地图获取经纬度,uniapp 百度地图拿省市区用什么

🏆 前端领域优质创作者 6216

売上データ作成の順

売上データ作成の確認は、実際に 受注入力→受注確定→出荷指示確定→出荷実績確定→売上データ作成 の順で試してください。

tyohaihai的专栏 2584

SAP 实例解析分期付款配置及应用

SAP系统的付款条件支持分期付款功能,其奥妙之处就在于需要定义一个母条款和一个子条款,其中,母条款需要标识“分期付款”。 首先,定义分期付款的母条款OBB8:             然后,定义子条款(即分期付款的具体方式)OBB9:   由上图可以看出,分期付款的配置还是很强大的,针对每次付款,都可以进行第二层次付款条件的设置。   然后,我们做一笔发票,

heng0757的专栏 1万+

学 Simulink—— 基于高频方波电压注入的表贴式永磁电机无感控制仿真

本文手把手教授基于Simulink的高频方波电压注入法实现表贴式永磁同步电机(SPMSM)无传感器控制。针对表贴式电机微弱凸极特性(Lq/Ld≈1.05-1.15),详解方波注入相比正弦注入的优势:通过5kHz方波(PWM频率半值)集中能量提升信噪比,并采用相邻周期电流直接相减的零延迟分离技术。系统架构包含高频注入器、无滤波器信号分离模块、锁相环观测器和磁饱和极性辨识等关键环节,提供参数设置经验(如注入幅值10-15%Vdc)和典型性能指标(位置误差<0.2rad)。特别强调工程实现要点:PWM同步时

xiaoheshang_123的博客 167

Java和SQL型的默认映射

备份一下 SQL のデータ型から Java のデータ型への標準的なマッピング

cuipingxu51111的专栏 530

把 ABAP Unit 测试放进本地类:让重构更安全、让测试更好找的组织方式

ABAP测试代码组织策略:单元测试与集成测试的合理存放位置 本文针对ABAP开发中测试代码组织混乱的问题,提出了一套系统化的解决方案: 单元测试应存放在被测类的本地测试include中(...CCAU或...T99),确保测试与代码同步演进且易于发现 跨对象测试(组件/集成/系统测试)应创建单独的全局测试类,并通过FOR TESTING和ABSTRACT进行防护 使用! @testing注释建立测试关系,使测试与被测对象明确关联,提高可发现性 针对不同技术栈(RAP/CAP/OData)提供了具体落地建议,

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1729

SELECT(データ取得)

WHERE句は、満たすべき条件を指定することにより選択される行数を制限します。 WHERE句は、SELECT命令と同様にOPEN CURSOR、UPDATE、およびDELETE命令でも使用されます。WHERE句の標準形式は以下のとおりです。 SELECT... WHERE cond... WHERE句のcond条件は、比較または一連の他の特殊式です。一連の条件を、W...

weixin_30879833的博客 252

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

データ・ディクショナリ

データディクショナリの概要データディクショナリはOracleデータベースで最も重要な部分の1つであり、データベースに関する情報を提供する読取り専用の表の集合です。データディクショナリには次のものが含まれます。データベース内のすべてのスキーマオブジェクト(表、ビュー、索引、クラスタ、シノニム、順序、プロシージャ、ファンクション、パッケージ、トリガーなど)の定義スキーマオブジェク...

weixin_34344677的博客 497

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

oracle数据类型和对应的java类型

地址: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.htm#BHCJBJCC SQLデータ型 JDBC型コード 標準Java型 Oracle拡張機能Java型 標準JDBC 1.0型:

jdzms23的专栏 5258

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

日付データ/文字列データの変換(TO_DATE、TO_CHAR、TO_TIMESTAMP)

 http://oracle.se-free.com/dml/07_todate.html 日付データ/文字列データの変換には、TO_DATE関数、TO_CHAR関数、TO_TIMESTAMPを使用するTO_CHAR(日付データ, 日付書式)日付データ を日付書式 の形式の文字列に変換するTO_DATE(文字列, 日付書式)日付書式 の形式で指定した、文

路漫漫其修远兮 2721

sql:将字符类型字段转换成数字并排序

DBデータ 原SQL(字符型排序) SELECT MAIL_ADDR, MAIL_ADDR_NO_TYPE FROM CUST_MAIL_INFO_CTL WHERE FINA_CD = '0034' AND CUST_ID = '9999000004' AND INV_FLG = '0' AND MAIL_ADDR_NO_TYPE IN ('1', '2', '11', '12') ORDER BY MAIL_ADDR_NO_TYPE ASC 现SQL(转换成int型排序) SELECT

羽裳醉月的博客 2620

二千万のホテルデータ処理

CREATE TABLE Hotel ( Name varchar(255), CardNo varchar(255), Descriot varchar(255), CtfTp varchar(255), CtfId varchar(255), Gender varchar(255), Birthday varchar(255), ...

weixin_30379531的博客 355

数据2

/* * テーブル作成スクリプト(SQL Server 版) * * SQL Server 7.0 + Service Pack 2 で動作確認 */ -- テーブル作成:商品マスタ CREATE TABLE 商品マスタ ( 商品ID NUMERIC NOT NULL, 商品名 VARCHAR(30) NOT NULL, グループ名 VARCHAR(20) NOT NULL, 仕入単価 NUMERIC, 卸単価 NUMERIC, ...

weixin_56962709的博客 118

日本IT|SQL工程师的工作内容以及所需的技能·资格

データベースの操作や運用において重要なSQLエンジニア。今回は、具体的な仕事内容や求められるスキル・知識、キャリアパスなどを解説します。SQLエンジニアとしてキャリアアップを考えている方は、ぜひご参考ください。

GSDjisidi的博客 700

SQL*Loader使用技巧1

あるテーブル定義Create Table TBL_DST13_TTBIT ( DST13TNOTE VARCHAR2(4000) )制御ファイルはLOAD DATAINFILE DST13.csvREPLACEINTO TABLE TBL_DST13_TTBITFIELDS TERMINATED BY , OPTIONALLY ENCLOSED BY "(DST13TNOTE)SQL*

wotiger的专栏 822

关于SQL Server 2005 Reporting Services的几点设置

1。在マトリックス中插入与数据变化无关的列,并根据需要设置边线等(eg.契約数) 步骤:“契約数”之右的数据与格式设置完成后,选中最左一行选择行グループの追加⇒全般⇒グループ化の条件中选择与已有行属性相同的式⇒OK     将要写进“契約数”的表格中的所有内容删除,并写入="契約数"⇒选中此格右键プロパティ⇒全般⇒重複データ非表示にチェック入れる⇒親グループまたデータセットで选择与表格中剩余部...

weixin_30483013的博客 142

SQL*Loader

CSVファイルからOracleのテーブルへデータを流し込むツール。 大量のinsert文を発行するよりは、断然高速。 データであるCSVファイルや固定長ファイルと、ロード方法を指定するコントロールファイルを用意 して実行する。 (CSVファイルからのロードはこのSQL*Loaderが使えるが、CSV出力には標準的な方法は無いらしくて、select文で加工する方法がよく使われるらしい。 こ...

weixin_33971130的博客 246

转:【ABAP】Code push downを実現する方法- Part1 Overview

Code push downとは ABAPにおけるCode push downとは、データを使って行う処理をできるだけデータベース側でさせるという考え方のことです。Code to data paradigmとも呼ばれます。转存失败重新上传取消ABAP for HANA and “Code Push-Down”より 集計処理を書くときに、従来はDBからデータを取ってきて内部テーブルに格納し、それをループしながら計算を行う、といったことをしていました。なぜなら、複雑なSELECTをするとDBアクセスの負荷が

weixin_48351770的博客 510
上一篇: (转)Determining equivalent SQL and COBOL data types
下一篇: (转)用哪个DB2命令查看DB2 instance是启动还是停止的?
mlxia
博客等级 码龄26年 28粉丝 410原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值