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