2011-12-20 106 views
0

我們試圖建立一個觸發與程序,就SQL - 使用過程通過X副本進行重複輸入?

  1. 通過其ISBN(國際標準書號!! !!)
  2. 確定其新的條形碼,而不是它的表ID的現有項目優先搜索( !! Item_BC !!)
  3. 添加相同的前綴(!! Item_BC !!)
  4. 插入表
  5. 重複達到此直到所需量(!! X_Copies !!)

程序importISBN看起來像這樣

@expl_notice = select notice_id from notice WHERE code=!!ISBN!!; 
DECLARE @var1 BINARY_INTEGER := !!Item_BC!!; 

BEGIN 
WHILE @var1 <= (!!Item_BC!!+!!X_Copies!!) LOOP 

SET @Item_BC = ((!!Item_Prefix!!)+ CAST(@var1 AS CHAR)) 

INSERT INTO exemplaires (expl_id, expl_cb, expl_notice) 
VALUES ('','@Item_BC','@expl_notice'); 

END WHILE; 
END; 

觸發是:

CALL importISBN("!!ISBN!!",!!Item_BC!!,!!X_Copies!!,"!!Item_Prefix!!"); 

用不同的方法第二個試用運行:

DROP PROCEDURE IF EXISTS importISDN; 
SET @noticeID = (SELECT notice_id FROM notice WHERE code = ISBN); 
    SET @maxID = barCode + nrCopies; 
    WHILE barCode < @maxID DO 
    SET @newBarCode = CONCAT(prefix,barCode); 
    SELECT @newBarCode; 
    INSERT INTO exemplaires (expl_id, expl_cb, expl_notice); 
    END WHILE; 
END; 

什麼給你認爲我們做錯了?

+0

那麼,你要做的,創建重複條目,複製重複條目,你想什麼讓我們來解決? – ChrisBD 2011-12-20 10:00:55

+0

是的,這是很多關於它,我試圖創建與增加項目條形碼重複,直到達到所需的數量,但我從來沒有使用過程,也許它可以直接與MySQL你 – BisLibrary 2011-12-20 10:13:40

+0

你可以張貼過程聲明,讓我我們可以查看您使用的ISBN和條形碼的數據類型。 – ChrisBD 2011-12-20 11:19:01

回答

0

我還不確定你究竟是什麼,所以我已經把我的答案分解成幾個階段。 注意:我沒有在我的機器上安裝MySQL,因此語法是SQL Server的Transact-SQL。

BINARY_INTEGER是一個Oracle 32位int數據類型,我相信。

CREATE PROCEDURE [dbo].[spImportISBN] 
(
    @ISBN int 
    ,@NumberOfCopies int 
) 
AS 
BEGIN 
    /*if no copies to be made then exit*/ 
    if @NumberOfCopies<1 
    begin 
     return(0); 
    end 

    declare @NoticeID int 
      ,@MaxID int 
      ,@NewISBN int 
      ,@NewBarcode nvarchar(16); 

    set @NoticeID = (select notice_id from Notice where code = @ISBN); 
     /* if no record found then exit with error code*/ 
    if @NoticeID is null 
    begin 
     return(10); 
    end 

    set @MaxID = @ISBN + @NumberOfCopies; 
    set @NewISBN = @ISBN; 
    while @NewISBN < @MaxID 
    begin 
     set @NewISBN = @NewISBN + 1; 
     set @NewBarcode = convert(nvarchar(16),@NewISBN);  
     insert into [ISBNTest].[dbo].[exemplaire] (expl_barcode, expl_notice) 
        values (@NewBarcode, @NoticeID); 

    end 
END 

我使用,然後運行它:

USE [ISBNTest] 
GO 

DECLARE @return_value int 

EXEC @return_value = [dbo].[spImportISBN] 
     @ISBN = 123400000, 
     @NumberOfCopies = 10 

SELECT 'Return Value' = @return_value 

GO 

ISBNTest是我的測試數據庫。

我的表定義如下:

CREATE TABLE [dbo].[exemplaire](
    [expl_id] [int] IDENTITY(1,1) NOT NULL, 
    [expl_notice] [int] NOT NULL, 
    [expl_barcode] [nchar](16) NOT NULL, 
CONSTRAINT [PK_exemplaire] PRIMARY KEY CLUSTERED 
(
    [expl_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

CREATE TABLE [dbo].[Notice](
    [notice_id] [int] IDENTITY(1,1) NOT NULL, 
    [code] [int] NOT NULL, 
CONSTRAINT [PK_Notice] PRIMARY KEY CLUSTERED 
(
    [notice_id] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY]