CI 묻고 답하기

제목 저장 프로시저(stored procedure) 연동 질문 입니다. 도와 주세요!!!
글쓴이 든이제 작성시각 2013/10/11 08:57:30
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 21907   RSS
 안녕하세요. CI에 입문 한지 벌써 1년이 다 되어 가네요.
요즘 제가 CI에서 저장 프로시저를 콜 하는 작업을 하고 있는데요...뭐가 문젠지 계속 에러가 나네요...
구글링을 해 봐도 짐작이 안가네요...
그런데 이상한건 에러가 나는데...저장 프로시저안의 쿼리들은 작동을 한다는 겁니다...
아래에 코드를 공유 할테니 고수님들 제발 도와 주세요...부탁 드립니다...

참고로 저는 지금 sqlsrv드라이버를 이용하여 db에 접속합니다.
************************************ 컨트롤러****************************************
public function sp_test() {
$Prod_ID = '1018707';
$sql = "EXECUTE dbo.SFS_SP_transaction @code = ?"; 
 
$this->db->query($sql, array($Prod_ID));
}
***************************************************************************************
********************************** 저장 프로시저*************************************

USE [PoMgmt_TEST]
GO
/****** Object:  StoredProcedure [dbo].[SFS_SP_transaction]    Script Date: 10/10/2013 10:44:37 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: <Author,,Name>
-- Create date: <Create Date,,>
-- Description: <Description,,>
-- =============================================
ALTER PROCEDURE [dbo].[SFS_SP_transaction]
 
@code nvarchar(20)
 
AS
 
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
    update TB_po_west set CANCELED = 'A' where Prod_ID = @code
exec [dbo].[SFS_SP_transaction]
END
위의 업데이트 쿼리는 작동을 합니다....그런데 아래의 문구는 계속 나오네요....ㅜ.ㅜ
***************************************************************************************
************************************에러 문구****************************************

Error Number: 42000

[Microsoft][SQL Server Native Client 10.0][SQL Server]Procedure or function 'SFS_SP_transaction' expects parameter '@code', which was not supplied.

EXECUTE dbo.SFS_SP_transaction @code = '1018707'

Filename: D:\Sempio Web System\Test Server\system\database\DB_driver.php

Line Number: 330
***************************************************************************************

 다음글 모델을 어떻게 사용해야 하나요? (3)
 이전글 mysql에서 두개의 database를 사용할때 (3)

댓글

한대승(불의회상) / 2013/10/11 09:08:32 / 추천 0
sql client 에서 아래처럼 저장 프로시저를 직접 호출 한 경우는 어떤결과가 나오나요?

EXECUTE dbo.SFS_SP_transaction @code = '1018707'

든이제 / 2013/10/11 09:36:31 / 추천 0
 public function sp_test() {
$sql = "EXECUTE dbo.SFS_SP_transaction @code"; 
 
$this->db->query($sql);
}

이렇게 콘트롤러에 하고 아래와 같이

BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
    update TB_po_west set CANCELED = 'A' where Prod_ID = @code
exec [dbo].[SFS_SP_transaction] @code = '1018707'
END

이렇게 하면

Error Number: 42000

[Microsoft][SQL Server Native Client 10.0][SQL Server]Must declare the scalar variable "@code".

EXECUTE dbo.SFS_SP_transaction @code

Filename: D:\Sempio Web System\Test Server\system\database\DB_driver.php

Line Number: 330

이런 에러가 나오네요....ㅜ.ㅜ

들국화 / 2013/10/11 14:13:40 / 추천 0
$sql = "dbo.SFS_SP_transaction @code = ?"; 
EXEC 를 제거하라는 말이 있네요...

테스트를 못해봐서.. ^^

milosz / 2013/10/11 16:03:41 / 추천 0
 지금 에러메시지 보시면 스칼라값이 아니라서 나타나는 에러로 보이네요.
@code는 nvachar로 선언되어 있는데 Prod_ID와 타입이 맞는지 확인해보셔야 할 것 같네요.

sqlsrv가 타입에 민감하게 반응했던 기억이 있어서.. 한번 확인 ㅎ
letsgolee / 2013/10/11 18:10:55 / 추천 0
 procedure를 한번도 해보지는 않았지만 잠깐 예제를 살펴보니 다음과 같아야 하지 않을까요?

public function sp_test() {
$Prod_ID = '1018707';
$sql = "EXECUTE dbo.SFS_SP_transaction ?"; 
 
$this->db->query($sql, array($Prod_ID));
}
프로시져 명 다음에 변수가 들어가야 하니까 바로 프로시져 명 뒤에 '?'를 붙이면 될 것 같네요. 프로시져는 원래대로 작성하구요.