2011-10-18 13 views
0

このエラーはどのように解決できますか? @countが1に達すると、コードにエラーが発生します。なぜループ内で「選択」するとエラーが発生しましたか?「既に名前付きオブジェクト」

データベースにはすでに「did2」という名前のオブジェクトがあります。

私は私が(何らかの理由で、PL/SQLで、これは非常に標準パターンである)ループ内で二回select intoの使用を許可しておりませんことをお読みください。以下のようなあなたのコード

BEGIN 
DECLARE @count INT 
SET @count = 0 
WHILE (@count < 200) 
BEGIN 
    DECLARE @did2 DATETIME 
    SELECT DATEADD(ss, @count, '01.01.2002 00:00:00') as did2 into did2 -- throws an error the 2nd time 
    INSERT INTO [DbPriceHistorTesty].[dbo].[QuoteHistories] 
       ([Id] 
       ,[ContractId] 
       ,[Open] 
       ,[Close] 
       ,[Min] 
       ,[Max] 
       ,[SenderId] 
       ,[CreatedAt]) 
     VALUES (
       @did2 
       ,1 
       ,1 
       ,1 
       ,1 
       ,1 
       ,'1' 
       ,GETDATE()) 
    SET @count = (@count + 1) 
END 
END 
+0

あなたは通常、Oracleの開発者ですか? –

答えて

3

すべての担当者にテーブルdid2を作成しています。

おそらく、代わりにこれが必要です。

SELECT @did2 = DATEADD(ss, @count, '01.01.2002 00:00:00') 

また、日付形式をYYYY-MM-DDTHH:MM:SSに変更することを検討する必要があります。

あなたはローカル日時設定に依存しないでしょう。まあ

+0

これで問題は解決しません。 SELECT INTOは新しいオブジェクトを作成し、既存のオブジェクトを持つことはできません。そのため、ループの2番目の繰り返しでは機能しません。 –

+0

@p.campbellああ、良いキャッチ。訂正してくれてありがとう。 –

1

変更は、それはあなたの問題解決します:

SET @did2 = DATEADD(ss, @count, '01.01.2002 00:00:00') 

を、サイドにループ変数を宣言します。

0

..テーブルに作成し、挿入に表がすでに存在している二度目の選択...

それは何だ場合、私は(ループの外でCREATE TABLEを使用することをお勧めして、ループ内で挿入されます「再変数

0

ではなく、彼らはあなたが実際にテーブルに挿入しようとしていない事実に拾ってきたので、他の回答は、おそらく私より優れている)を行うに

をしようとして問題があることですSELECT INTOは、オブジェクトと同じスキーマを持つ新しいテーブルをFROMに作成します。句。このエラーは、データベースに名前のオブジェクトがすでに存在する場合に発生します(この場合は 'did2')。

成功するには、ループ外に受信テーブルを作成する必要があります。

関連する問題