2017-01-11 17 views
0

IBM db2.Needの初心者です。下記のSPをdb2構文に変換してください。しかし、私はDb2で使用されている、または利用可能な多くの同等物についています。 Googleの調査でも、SQL Serverストアドプロシージャで行っているように、どのようにしてdb2のテーブルのオブジェクトIDを正確に比較できるかはわかりません。誰もが正しい方法で私に示唆することができますか?IBM DB2のSQL Serverストアドプロシージャの同等の構文 - 展開中のエラー

EDIT:特定の行に展開している間は、同等のDB2構文でエラーが発生しましたが、以下のエラーが発生します。この構文の問題点を理解してください。

行番号25:DECLARE v_sqlstate CHAR(5);

BACKUPTABLE:25:予期しないトークンが ""の後に見つかりました"<variable declaration>。期待されるトークンには次のものがあります:SQLCODE = -104、SQLSTATE = 42601、DRIVER = 4.18.60 予期しないトークン変数の宣言が ""の後に見つかりました。予想されるトークンが含まれる: "" .. SQLCODE = -104、SQLSTATE = 42601、DRIVER = 4.18.60

SQL Serverのストアドプロシージャの構文:

CREATE PROCEDURE [dbo].[BackUpTable] 
     @TableName sysname 
    AS 
    BEGIN 

     SET nocount ON 

     DECLARE @sql VARCHAR(500) 

     IF EXISTS (SELECT * 
       FROM sys.objects 
       WHERE object_id = Object_id(N'[dbo].[' + @TableName+'_EST' + ']') 
         AND TYPE IN (N'U')) 

      BEGIN 
       SET @sql = 'declare @Done bit 
          set @Done = 0 
          while @Done = 0 
          begin 
          delete top (100000) 
          from ' + @TableName + '_Bak' + 
          ' if @@rowcount = 0  
           set @Done = 1 
          end;' 
       SET @sql = @sql + 'insert into ' + @TableName + '_Bak select * from ' + 
         @TableName +'_EST' 

       EXEC(@sql) 
      END 
     ELSE 
      BEGIN 
       DECLARE @err_message VARCHAR(300) 

       SELECT @err_message = 'The table "' + Isnull(@TableName, 'null') + 
           '" does not exist' 

       RAISERROR (@err_message, 16, 1) 

      END 

    END 

DB2は、SYNTAX SO FAR CREATED:

CREATE OR REPLACE PROCEDURE BackUpTable (IN TableName VARCHAR(128)) 
    DYNAMIC RESULT SETS 1 

BEGIN 

    DECLARE dynamicSql VARCHAR(500); 

    IF(EXISTS( 
     SELECT * FROM SYSIBM.SYSTABLES 
      WHERE NAME = TableName||'_EST' 
      ) 
    ) 

    THEN 

      SET dynamicSql = 'DELETE FROM '||TableName ||'_BAK'; 

      SET dynamicSql = dynamicSql ||'insert into ' || TableName || '_BAK select * from ' || 
        TableName || '_EST'; 

      EXECUTE IMMEDIATE dynamicSql; 

    ELSE 

    DECLARE v_sqlstate CHAR(5);  
    DECLARE v_sqlcode INT; 

    DECLARE SQLSTATE CHAR(5) DEFAULT '00000'; 
    DECLARE SQLCODE INT DEFAULT 0; 

    DECLARE EXIT HANDLER FOR SQLEXCEPTION 

    BEGIN 

    SELECT SQLSTATE, SQLCODE 
    INTO v_sqlstate, v_sqlcode 
    FROM sysibm.sysdummy1;  

    SET O_Error_Msg = 'TABLE IS NOT AVAILABLE:: SQLState : '||v_sqlstate||' SQLCode : '||v_sqlcode ; 

    END; 

    END IF; 

END 
あなたがそれを行うことができますz/OS上

答えて

0

:応答のための

IF(EXISTS(SELECT 1 FROM QSYS2.SYSTABLES WHERE TABLE_SCHEMA = 'YOURLIB' AND TABLE_NAME = 'YOURTABLENAME')) THEN 
DROP TABLE YOURLIB.YOURTABLENAME; 
END IF; 
+0

感謝。私はこのような何かをしようとしています:(EXISTS( \t \t SELECT * NAMEは=テーブル名|| '_EST' \t \t \t \t \t SYSIBM.SYSTABLES FROM) )のIF – RVR

関連する問題