使用存储过程保存Codeigniter

时间:2016-10-26 03:45:08

标签: php codeigniter sql-server-2008 stored-procedures

美好的一天。我试图用存储过程保存。当我直接从Sql Server运行时,它工作正常。但是,当我试图从我的Codeigniter运行它时,它无法正常工作。没有错误。

这是我的Codeigniter控制器功能:

public function save(){
        extract(populateform());
        $transno = $this->session->userdata('session_transno');
        $recdata = $this->session->userdata('session_date');
        $loginuser = $this->input->cookie("cookie_posweb_user");
        $this->modelmodel->queryhandle("[DeliveryReceiptInsert] '".$transno."', '".inggris_date($recdata)."',
                                    '".$loginuser."',
                                    '".implode(';', $LineNo).';'."','".implode(';', $ItemCode).';'."','".implode(';', $ExtraRemark).';'."',
                                    '".implode(';', $ExtraRemark2).';'."','".implode(';', $Quantity).';'."',
                                    '".implode(';', $recv_qty).';'."','".implode(';', $uom).';'."','".implode(';', $ext_rmrk).';'."'");

    }

这是我的模特

function queryhandle($query)
    {
        $this->db->query($query);
    }

这是我的存储过程

USE [InventWeb]
GO
/****** Object:  StoredProcedure [dbo].[DeliveryReceiptInsert]    Script Date: 10/26/2016 10:38:13 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DeliveryReceiptInsert]
(
    --Header
    @DeliveryOrderTransNo as Varchar(32),
    @ReceivingDate as Datetime,
    @CreatedBy as varchar(32),
    --Detail
    @LineNo as Varchar(Max),
    @ItemCode as Varchar(Max),
    @ExtraRemark as Varchar(Max),
    @ExtraRemark2 as Varchar(Max),
    @Quantity as Varchar(Max),
    @QuantityReceived as Varchar(Max),
    @UOMCode as Varchar(Max),
    @ExtraRemarkReceive as Varchar(Max)
)
as
Begin
    --Variable

    declare @DeliveryOrderDocumentNo as varchar(32)
    declare @FromCustomer as Varchar(32)
    declare @ToCustomer as Varchar(32)
    declare @ExternalDocumentNo as Varchar(32)
    declare @CategoryCode as Varchar(4)
    declare @ETADate as Datetime
    declare @ShippingDocumentNo as Varchar(32)
    declare @ShippingDate as Datetime
    declare @ShippedBy as Varchar(16)
    declare @Remark as Varchar(64)
    declare @Remark2 as Varchar(64)



    select 
           @DeliveryOrderDocumentNo = DocumentNo,   
           @FromCustomer = FromCustomerCode,
           @ToCustomer   = ToCustomerCode,
           @ExternalDocumentNo = ExternalDocumentNo,
           @CategoryCode = CategoryCode,
           @ETADate = ETADate,
           @ShippingDocumentNo = ShippingDocumentNo,
           @ShippedBy = ShippedBy,
           @ShippingDate = ShippingDate,
           @Remark      = Remark,
           @Remark2     = Remark2

    from TMP_deliveryorder where TransactionNo = ''+@DeliveryOrderTransNo+''


    Declare @SerieCode as Varchar(32)
    Declare @TransNo as Varchar(32)
    Declare @DocumentNo as Varchar(32)
    Declare @TempCreatedBy as Varchar(32)
    Declare @TempCreatedDate as DateTime
    Declare @Posisi as Int
    Declare @Baris as Int
    Declare @Mulai as Int
    Declare @Temp as Varchar(32)
    Declare @TotalRow as Int
    Declare @TransNoDetail as Varchar(32)
    Declare @KumpTransNoDetail as Varchar(Max)
    Declare @ErrorMsg Varchar(Max)
    Declare @Sql as Varchar(Max)
    Declare @Find as Varchar(1)
    Declare @TempLineNo as Varchar(Max)
    Declare @TempXremark as Varchar(Max)
    Declare @TempXremark2 as Varchar(Max)
    Declare @TempXremarkReceipt as Varchar(Max)
    Declare @TempQty as Varchar(Max)    
    Declare @TempQtyReceipt as Varchar(Max)
    Declare @TempUOMCode as Varchar(Max)
    Declare @TempItemCode as Varchar(Max)
    Declare @DoTransNo as Varchar(32)
    --Variable

    --Checking Parameter
    --If (@DocumentNo Is Null) set @DocumentNo = ''
    If (@ReceivingDate Is Null) set @ReceivingDate = GETDATE()
    If (@DeliveryOrderDocumentNo Is Null) set @DeliveryOrderDocumentNo = ''
    If (@FromCustomer Is Null) set @FromCustomer = ''
    If (@ToCustomer Is Null) set @ToCustomer = ''
    If (@ExternalDocumentNo Is Null) set @ExternalDocumentNo = ''
    If (@CategoryCode Is Null) set @CategoryCode = ''
    If (@ETADate Is Null) set @ETADate = GETDATE()
    If (@ShippingDocumentNo Is Null) set @ShippingDocumentNo = ''
    If (@ShippingDate Is Null) set @ShippingDate = GETDATE()
    If (@ShippedBy Is Null) set @ShippedBy = ''
    If (@Remark Is Null) set @Remark = ''
    If (@Remark2 Is Null) set @Remark2 = ''
    If (@CreatedBy Is Null) set @CreatedBy = ''
    If (@LineNo Is Null) set @LineNo = ''
    If (@ItemCode Is Null) set @ItemCode = ''
    If (@ExtraRemark Is Null) set @ExtraRemark = ''
    If (@ExtraRemark2 Is Null) set @ExtraRemark2 = ''
    If (@Quantity Is Null) set @Quantity = ''
    If (@QuantityReceived Is Null) set @QuantityReceived = ''
    If (@UOMCode Is Null) set @UOMCode = ''
    If (@ExtraRemarkReceive Is Null) set @ExtraRemarkReceive = ''
    If (@ReceivingDate = '') set @ReceivingDate = GETDATE()
    If (@DeliveryOrderDocumentNo = '') 
        Begin
            Raiserror('Invalid Parameter Delivery Order DocumentNo',11,-1,-1)
            Return
        End
    If (@FromCustomer = '') 
        Begin
            Raiserror('Invalid Parameter From Customer Code', 11,-1,-1)
            Return
        End
    If (@ToCustomer = '') 
        Begin
            Raiserror('Invalid Parameter To Customer Code', 11,-1,-1)
            Return
        End
    If (@CategoryCode = '') 
        Begin
            Raiserror('Invalid Parameter Category Code', 11,-1,-1)
            Return
        End
    If (@ETADate = '') set @ETADate = GETDATE()
    If (@ShippingDocumentNo = '') 
        Begin
            Raiserror('Invalid Parameter Shipping Document Code', 11,-1,-1)
            Return
        End
    If (@ShippingDate = '') set @ShippingDate = GETDATE()
    If (@ShippedBy = '') 
        Begin
            Raiserror('Invalid Parameter Shipped By', 11,-1,-1)
            Return
        End
    If (@CreatedBy = '') 
        Begin
            Raiserror('Invalid Parameter Created By', 11,-1,-1)
            Return
        End
    If (@LineNo = '') 
        Begin
            Raiserror('Invalid Parameter Line No', 11,-1,-1)
            Return
        End
    If (@ItemCode = '') 
        Begin
            Raiserror('Invalid Parameter Item Code', 11,-1,-1)
            Return
        End
    If (@Quantity = '') 
        Begin
            Raiserror('Invalid Parameter Quantity', 11,-1,-1)
            Return
        End
    If (@QuantityReceived = '') 
        Begin
            Raiserror('Invalid Parameter Quantity Received', 11,-1,-1)
            Return
        End
    If (@UOMCode = '') 
        Begin
            Raiserror('Invalid Parameter UOM Code', 11,-1,-1)
            Return
        End
    If Not Exists (Select CustomerCode From Customer Where CustomerCode = @FromCustomer)
        Begin
            Raiserror('From Customer Code Not Found',11,-1,-1)
            Return
        End
    If Not Exists (Select CustomerCode From CustomerSetup Where CustomerCode = @ToCustomer)
        Begin
            Raiserror('Wrong To Customer Code',11,-1,-1)
            Return
        End
    If Not Exists (Select CategoryCode From DeliveryOrderCategory Where CategoryCode = @CategoryCode)
        Begin
            Raiserror('Category Code Not Found',11,-1,-1)
            Return
        End
    --Checking Parameter


    --Set Formula for Transaction No 
    set @SerieCode = (Select SerieCode From CustomerSetup With(READPAST) Where CustomerCode = @ToCustomer)
    --Set Formula for Transaction No


    Begin Transaction
        --Set Transaction No for Header
        Set @TransNo = dbo.TransactionNumber3 ( 'TRANS', 'DOR', 'TRANS', @SerieCode, @ToCustomer )
        --Set Transaction No for Header


        --Save Transaction No Header to TempNumberSeries
        Insert Into TempNumberSeries Values (@TransNo)
        --Save Transaction No Header to TempNumberSeries


        --Set Document No for Header
        Set @DocumentNo = dbo.TransactionNumber3 ( 'DOC', 'DOR', @CategoryCode, @SerieCode, @ToCustomer )
        --Set Document No for Header

        Set @DoTransNo = (Select TransactionNo From DeliveryOrder With(NoLock) Where DocumentNo = @DeliveryOrderDocumentNo)

        --Save Document No Header to TempNumberSeries
        Insert Into TempNumberSeries Values (@DocumentNo)
        --Save Document No Header to TempNumberSeries


        --Save Header
        Insert Into DeliveryReceipt(TransactionNo, DocumentNo, ReceivingDate,
            ShippingDocumentNo, ShippedBy, ShippingDate, DeliveryOrderDocumentNo,
            FromCustomerCode, ToCustomerCode, ExternalDocumentNo, CategoryCode,
            Remark, Remark2, ETADate, SendStatus, PostingBy, PostingDate, PostingStatus, 
            CreatedDate, CreatedBy, ModifiedDate, ModifiedBy)
        Values (@TransNo, @DocumentNo, @ReceivingDate,
            @ShippingDocumentNo, @ShippedBy, @ShippingDate, @DeliveryOrderDocumentNo,
            @FromCustomer, @ToCustomer, @ExternalDocumentNo, @CategoryCode,
            @Remark, @Remark2, @ETADate, 0, '', '', 0, GETDATE(),   @CreatedBy, GETDATE(), @CreatedBy)
        --Save Header


        Execute ActivityLog_Insert  @TransNo, @ShippingDocumentNo, '', 'DeliveryReceipt', 'INSERT', @CreatedBy, @ToCustomer

         IF EXISTS (SELECT * 
            FROM INFORMATION_SCHEMA.TABLES   
                WHERE TABLE_SCHEMA = N'dbo'  AND TABLE_NAME = N'TableDOR')
                    BEGIN
                      DROP Table TableDOR;
                    END


        --Create Table Pembantu
        Create Table TableDOR
        (
            xId Int,
            xData varchar(32)
        )
        --Create Table Pembantu


        --Pecah String Item
        set @Posisi = 1
        set @Baris = 1
        set @Mulai = 1
        While Len(@ItemCode) >= @Posisi
        Begin
            If LTrim(RTrim(SubString(@ItemCode, @Posisi, 1))) = ';'
                Begin
                    --Get Data
                    set @Temp = LTRIM(RTRIM(SubString(@ItemCode, @Mulai, @Posisi - @Mulai)))
                    --Insert Data to Tabel Pembantu
                    Insert Into TableDOR Values (@Baris, @Temp)
                    --Check Item
                    If not Exists (Select ItemCode From Item With(READPAST) Where ItemCode = @Temp)
                        Begin
                            raiserror('Invalid Item Code',11,-1,-1)
                            rollback
                            return
                        End

                    --Set Baris +1
                    set @Mulai = @Posisi + 1
                    set @Baris = @Baris + 1
                    set @Temp = ''
                End

            set @Posisi = @Posisi + 1
        End
        --Pecah String Item


        --Looping Sebanyak Baris
        set @TotalRow  = @Baris - 1
        set @Posisi = 1
        set @Baris = 1
        While @TotalRow >= @Baris
            Begin
            --Pecah String LineNo
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@LineNo))) >= @Posisi
                    Begin
                        If SubString(@LineNo, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempLineNo = substring(@LineNo, 1, @Posisi - 1)
                                set @LineNo = substring(@LineNo, @Posisi + 1, len(@LineNo) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String LineNo


                --Pecah String Xremark
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@ExtraRemark))) >= @Posisi
                    Begin
                        If SubString(@ExtraRemark, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempXremark = substring(@ExtraRemark, 1, @Posisi - 1)
                                set @ExtraRemark = substring(@ExtraRemark, @Posisi + 1, len(@ExtraRemark) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String Xremark


                --Pecah String Xremark2
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@ExtraRemark2))) >= @Posisi
                    Begin
                        If SubString(@ExtraRemark2, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempXremark2 = substring(@ExtraRemark2, 1, @Posisi - 1)
                                set @ExtraRemark2 = substring(@ExtraRemark2, @Posisi + 1, len(@ExtraRemark2) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String Xremark2


                --Pecah String XremarkReceipt
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@ExtraRemarkReceive))) >= @Posisi
                    Begin
                        If SubString(@ExtraRemarkReceive, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempXremarkReceipt = substring(@ExtraRemarkReceive, 1, @Posisi - 1)
                                set @ExtraRemarkReceive = substring(@ExtraRemarkReceive, @Posisi + 1, len(@ExtraRemarkReceive) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String XremarkReceipt


                --Pecah String Qty
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@Quantity))) >= @Posisi
                    Begin
                        If SubString(@Quantity, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempQty = substring(@Quantity, 1, @Posisi - 1)
                                set @Quantity = substring(@Quantity, @Posisi + 1, len(@Quantity) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String Qty


                --Pecah String Qty Receipt
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@QuantityReceived))) >= @Posisi
                    Begin
                        If SubString(@QuantityReceived, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempQtyReceipt = substring(@QuantityReceived, 1, @Posisi - 1)
                                set @QuantityReceived = substring(@QuantityReceived, @Posisi + 1, len(@QuantityReceived) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @Find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String Qty Receipt


                --Pecah String UOM Code
                set @Find = 'N'
                set @Posisi = 1
                set @Mulai = 1                  
                while len(ltrim(rtrim(@UOMCode))) >= @Posisi
                    Begin
                        If SubString(@UOMCode, @Posisi, 1) = ';'
                            Begin
                                --Get Data
                                set @TempUOMCode = substring(@UOMCode, 1, @Posisi - 1)
                                set @UOMCode = substring(@UOMCode, @Posisi + 1, len(@UOMCode) - @Posisi)
                                set @Find = 'Y'
                            End                             
                        set @Mulai = @Posisi + 1
                        set @Posisi = @Posisi + 1
                        if @Find = 'Y'
                            break
                        else
                            continue
                    End
                --Pecah String UOM Code


                --Create Trans No Detail
                Set @TransNoDetail = dbo.TransactionNumber3 ( 'TRANS', 'DORD', 'TRANS', @SerieCode, @ToCustomer )
                --Create Trans No Detail


                --Save Trans No Detail To TempNoSerie
                Insert Into TempNumberSeries Values (@TransNoDetail)
                --Save Trans No Detail To TempNoSerie
                Execute UpdateTransactionNumber 'TRANS', 'DORD', 'TRANS', @SerieCode, 1, @ToCustomer
                --Get Item Code 
                set @TempItemCode = (Select xData From TableDOR Where xId = @Baris)
                --Get Item Code 

                Declare @IntLineNo Int
                Set @IntLineNo = Cast(@TempLineNo as Int)

                --Save Detail
                Insert Into DeliveryReceiptDetail (TransactionNo, [LineNo], ItemCode, ExtraRemark, 
                    ExtraRemark2, Quantity, QuantityReceived, UOMCode, ExtraRemarkReceipt, DeliveryReceiptTransNo, 
                    CreatedDate, CreatedBy, ModifiedDate, ModifiedBy)
                Values (@TransNoDetail, @IntLineNo, @TempItemCode, @TempXremark,
                    @TempXremark2, @TempQty, @TempQtyReceipt, @TempUOMCode, @TempXremarkReceipt, @TransNo,
                    GETDATE(), @CreatedBy, GETDATE(), @CreatedBy)
                --Save Detail


                --Set @Baris
                set @Baris = @Baris + 1
                --Set @Baris
            End
        --Looping Sebanyak Baris


        --Delete TempNumberSerie
        Delete TempNumberSeries Where NumberSeriesCode = @TransNo
        Delete TempNumberSeries Where NumberSeriesCode = @DocumentNo
        Begin Try
            Set @Sql = 'Delete TempNumberSeries Where NumberSeriesCode in (' + @KumpTransNoDetail + ')'
            Exec(@sql)
        End Try
        Begin Catch
            set @ErrorMsg = (Select ERROR_MESSAGE())
            set @ErrorMsg = 'Delete TempNumberSeries For Detail Failed!' + Char(13) + 'Please Call Your IT.' + Char(13) + @ErrorMsg
            Raiserror('%s',11,-1,@ErrorMsg)
            Rollback
            Return
        End Catch   
        --Delete TempNumberSerie


        --Update NoSerieSetup 
        Execute UpdateTransactionNumber 'TRANS', 'DOR', 'TRANS', @SerieCode, 1, @ToCustomer
        Execute UpdateTransactionNumber 'DOC', 'DOR', @CategoryCode, @SerieCode, 1, @ToCustomer
        --Update NoSerieSetup 


        --Execute ActivityLog_Insert  @DoTransNo, @DeliveryOrderDocumentNo, '', 'TMP_DeliveryOrder', 'DELETE', @CreatedBy, @ToCustomer


        --Return Trans No Header
        select @TransNo as TransactionNo, @DocumentNo as DocumentNo

        --Return Trans No Header
    Commit Transaction
End

这是我如何直接从Sql Server

运行它
[DeliveryReceiptInsert] 'DO-DI-GCZAR10-407', '2016-11-01', '1500676', '1000;2000;3000;','P160012;P160013;P160014;',';;;', ';;;','1.00000000000000000000;1.00000000000000000000;1.00000000000000000000;', '1;1;1;','PCS;PCS;PCS;','12;12;12;'

0 个答案:

没有答案
相关问题