16.20 - PARAMETER STYLE - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-162K-JPN
Language
日本語 (日本)

プロシージャにパラメータを渡すときに使用するパラメータの受け渡し表記。

この句は、すべての外部プロシージャで必須です。指定するパラメータ形式は、外部プロシージャのパラメータの受け渡し表記に適合する必要があります。

この時点でパラメータ形式を指定しない場合は、パラメータ形式を外部本体の参照と共に指定できます。

同じCREATE PROCEDUREリクエストまたはREPLACE PROCEDUREリクエストでパラメータ形式を複数回指定することはできません。

SQL
標識変数を使用して引数を渡します。
その結果、NULLを入力として渡して結果として返すことが常に可能になります。
SQLがデフォルトのパラメータ形式です。
TD_GENERAL
パラメータを使用して引数を渡します。
NULLを渡すことも返すこともできません。
JAVA
すべてのJavaプロシージャで必須です。
JavaプロシージャがNULL引数を受け入れる必要がある場合、EXTERNAL NAME句にはパラメータのリストを含め、Javaオブジェクトにマップするデータ型を指定する必要があります。

例: PARAMETER STYLE SQLを使用したプロシージャの作成

次のCREATE PROCEDUREリクエストは、Teradataプラットフォーム上にGetRegionXSPという名前の外部SQLプロシージャをインストールします。

   CREATE PROCEDURE GetRegionXSP
     (INOUT region VARCHAR(64))
   LANGUAGE C
   NO SQL
   EXTERNAL NAME 'CS!getregion!xspsrc/getregion.c!F!xsp_getregion'
   PARAMETER STYLE SQL;

この定義と例: PARAMETER STYLE TD_GENERALを使用したプロシージャの作成で提供されている定義の違いは、PARAMETER STYLE宣言だけです。このプロシージャはパラメータ形式SQLを使用します。

次の抜粋は、パラメータ形式SQLを宣言するCプロシージャ コードの一部を示しています。

   /*****  C source file name: getregion.c  *****/
   
   #define  SQL_TEXT Latin_Text
   #include "sqltypes_td.h"
   #include <string.h>
   
   void xsp_getregion( VARCHAR_LATIN *region,
                       int           *region_isnull,
                       char           sqlstate[6],
                       SQL_TEXT       extname[129],
                       SQL_TEXT       specific_name[129],
                       SQL_TEXT       error_message[257] )
   {
        …
   }

例: PARAMETER STYLE TD_GENERALを使用したプロシージャの作成

次のCREATE PROCEDUREリクエストは、Teradataプラットフォーム上にGetRegionXSPという名前の外部SQLプロシージャをインストールします。

   CREATE PROCEDURE GetRegionXSP
     (INOUT region VARCHAR(64))
   LANGUAGE C
   NO SQL
   EXTERNAL NAME 'CS!getregion!xspsrc/getregion.c!F!xsp_getregion'
   PARAMETER STYLE TD_GENERAL;

この定義と例: PARAMETER STYLE SQLを使用したプロシージャの作成で提供されている定義の違いは、PARAMETER STYLE宣言だけです。このプロシージャはパラメータ形式TD_GENERALを使用します。

次の抜粋は、パラメータ形式TD_GENERALを宣言するCプロシージャ コードの一部を示しています。

   /*****  C source file name: getregion.c  *****/
   
   #define SQL_TEXT Latin_Text
   #include "sqltypes_td.h"
   #include <string.h>
   
   void xsp_getregion( VARCHAR_LATIN *region,
                       char           sqlstate[6])
   {
        …
   }

例: Java外部SQLプロシージャの作成

次の一連の例で、CREATE PROCEDUREリクエストおよびそれに関連するさまざまなパラメータ データ型用の関連Java外部プロシージャ コードを示します。

次は、BYTEINTパラメータ データ型の例です。

     CREATE PROCEDURE mybyteint
       (IN  b BYTEINT
        OUT c BYTEINT)
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'User_jar:UnitTest.mybyteint';
     public static void mybyteint(
        byte a,
        byte[] Result) throws SQLException

次は、SMALLINTパラメータ データ型の例です。

     CREATE PROCEDURE mysmallint
       (IN    b smallint, 
        INOUT c smallint )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'newint_jar:newint.mysmallint';
     public static void mysmallint(
        short a,
        short[] Result ) throws SQLException

次は、INTEGERパラメータ データ型の例です。

     CREATE PROCEDURE myint
       (IN  b INTEGER, 
        OUT c INTEGER )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA 
     EXTERNAL NAME 'user_jar:UnitTest.myint';
     public static void myint(int i,
        int[] retval) throws SQLException

次は、DECIMALまたはNUMERICパラメータ データ型の例です。

     CREATE PROCEDURE mydecs
       (IN  c DECIMAL(8,2), 
        OUT d DECIMAL(8,2))
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.mydec';
     public static void mydecs(BigDecimal c, BigDecimal[] d)
         throws SQLException

次は、FLOATまたはREALパラメータ データ型の例です。

     CREATE PROCEDURE myfloat
       (IN  i FLOAT, 
        OUT j FLOAT )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.myfloat';
     public static void myfloat(
        Double c,
        Double[] Result) throws SQLException

次は、DATEパラメータ データ型の例です。

     CREATE PROCEDURE mydatediagret
       (IN  d DATE,
        OUT o DATE  )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.mydatediagret';
     public static void mydatediagret(
        java.sql.Date date,
        java.sql.Date[] Result) throws SQLException

次は、TIME WITH TIME ZONEパラメータ データ型の例です。

     CREATE PROCEDURE mytimezdiagret
       (IN   t TIME WITH TIME ZONE,
        OUT  d TIME WITH TIME ZONE )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.mytimezdiagret';
     public static void mytimezdiagret(
        java.sql.Time time,
        java.sql.Time[] Result) throws SQLException

Java仮想マシンの実装では、うるう秒がサポートされていないため、SECONDフィールドの最大値は61.999999ではなく、59.999999です。

次は、TIMESTAMP WITH TIME ZONEパラメータ データ型の例です。

     CREATE PROCEDURE mytszdiagret
       (IN  t TIMESTAMP WITH TIME ZONE,
        OUT d TIMESTAMP WITH TIME ZONE  )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.mytszdiagret';
     public static void mytszdiagret (
        java.sql.Timestamp p1,
        java.sql.Timestamp[] result) throws SQLException

Java仮想マシンの実装では、うるう秒がサポートされていないため、SECONDフィールドの最大値は61.999999ではなく、59.999999です。

次は、INTERVAL YEARパラメータ データ型の例です。

     CREATE PROCEDURE intcpy
       (IN  parameter_1 INTERVAL YEAR,
        OUT t           INTERVAL YEAR )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.intcpy';
     public static void intcpy( String param_1,
        String[] result ) throws SQLException

次は、CHARACTERまたはVARCHARパラメータ データ型の例です。

     CREATE PROCEDURE strcpy
       (IN  parameter_1 VARCHAR(15),
        OUT t           VARCHAR(15) )
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.strcpy';
     public static void strcpy( String param_1,
        String[] result ) throws SQLException

次は、CLOBパラメータ データ型の例です。

     CREATE PROCEDURE myclobdiagret2
       (IN  b CLOB)
     LANGUAGE JAVA
     MODIFIES SQL DATA
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.myclobdiagret2';
          public static void myclobdiagret2(
                 java.sql.Clob data) throws SQLException
     {
       Connection conn =        DriverManager.getConnection("jdbc:default:connection");
       PreparedStatement p = conn.prepareStatement("ins into tab2
                                                    values(1,?)");
       p.setClob(1, data);
       p.executeUpdate();
     }

次は、VARBYTEパラメータ データ型の例です。

     CREATE PROCEDURE mybvdiagret
       (IN  c  varbyte(30),
        OUT d  varbyte(30))
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.mybvdiagret';
     public static void mybvdiagret(
        byte[] data,
        byte[][] Result ) throws SQLException

次は、BLOBパラメータ データ型の例です。

     CREATE PROCEDURE myblobdiagret
       (IN b  blob,
        OUT c blob) 
     LANGUAGE JAVA
     NO SQL
     PARAMETER STYLE JAVA
     EXTERNAL NAME 'user_jar:UnitTest.myblobdiagret';
     public static void myblobdiagret(
        java.sql.Blob data,
        java.sql.Blob[] Result) throws SQLException