1

テーブルが存在するかどうかをチェックし、存在する場合はそれをSystemiにドロップするSQLステートメントを作成しようとしています。

簡単なIF EXISTS説明だと思いましたが、問題があり、進め方がわかりません。

完全な声明:

IF EXISTS (SELECT TABLE_NAME FROM <<DatabaseName>>.VIEWS         
WHERE TABLE_NAME = 'TABLE')         
DROP VIEW <<DatabaseName>>.TABLE
GO

エラーで戻ってきます

キーワードIFは予期されていません

私はSystemiの完全な初心者ですが、手順について読んだことがありますが、これを回避できますか?

4

1 に答える 1

2

ストアド プロシージャ内で IF ステートメントを使用できるため、次のような方法でこれを実現できます。

CREATE PROCEDURE CREATE_TABLE (
    IN IN_TABLE_NAME VARCHAR(128), 
    IN IN_TABLE_SCHEMA VARCHAR(128),
    IN IN_TABLE_DEF VARCHAR(4000))

    LANGUAGE SQL MODIFIES SQL DATA

    DECLARE CNT INT DEFAULT 0;
    DECLARE STMT VARCHAR(1000);
    SELECT COUNT(*) INTO CNT
      FROM QSYS2/SYSTABLES
      WHERE TABLE_NAME = IN_TABLE_NAME and TABLE_SCHEMA = IN_TABLE_SCHEMA

    CASE CNT
        WHEN 1 THEN
            SET TABLE_NAME = 'CORPDATA.DEPT_' CONCAT P_DEPT CONCAT '_T';
            SET STMT = 'DROP TABLE ' || IN_TABLE_SCHEMA || '/' || IN_TABLE_NAME;
            PREPARE S1 FROM STMT;
            EXECUTE S1;
    END CASE

    SET STMT = 'CREATE TABLE ' || IN_TABLE_SCHEMA || '/' || IN_TABLE_NAME || 
                IN_TABLE_DEF;
    PREPARE S1 FROM STMT;
    EXECUTE S1;

次に、テーブル名、スキーマ、および列定義を渡してこのプロシージャを呼び出すことができます。

CALL CREATE_TABLE('MYTABLE', 'MYSCHEMA', '(
    COL1 INTEGER NOT NULL, 
    COL2 VARCHAR(100))';

これを実際にテストしたことはありませんが、これにより、何をする必要があるかについての基本的なアイデアが得られるはずです。

于 2012-12-07T21:49:56.693 に答える