Mssql 프로시저 쿼리질문입니다. 0 8 2,711

by 초보DB [PL/SQL] [2017.10.26 10:06:11]


create PROCEDURE P_dataUpdate( 
 @P_Location in CHAR{1000},
 @P_AcctNum in CHAR{1000},
 @P_UsrID IN CHAR{1000},
 @P_SeqNum Numeric,
 @P_SegCnt Numeric) 

AS
insert into openquery(ERSCACU, 'select * FROM CACSUSR.P325CCH')
values (@P_Location, @P_AcctNum, @P_SeqNum, 0, ' ',convert(varchar,getdate(),12),left(replace(convert(varchar(12),getdate(),8),':',''),4),'IC','A','O',0,0,0,0,' ',' ',' ',@P_UsrID,' ',' ',' ',' ',' ',' ');

update openquery(ERSCACU, 'select * from CACSUSR.P325PRI where LOCATION_CODE = ''@P_Location'' and ACCT_NUM = ''@P_AcctNum''')
set LOW_CODED_HIST_SEQ= @P_SeqNum, 
     CODED_HIST_SEG_CNT= @P_SegCnt;

 

프로시저 내용은 이렇구요.. 실행구문은

EXEC P_dataupdate '101010','111111','1234',9999,1  

이런식으로 실행하게되는데 실행을 하면 Insert 값은 잘들어가는데 update 구문에서 업데이트되질 않습니다 ㅠㅠ

어떤것이 문제인거일까요..?

 

by 마농 [2017.10.26 10:20:17]

변수의 값으로 비교하는게 아니라 그냥 문자열 '@P_Location' 로 비교하는 거네요.
다음과 같이 바꿔야 합니다.
'select * from CACSUSR.P325PRI where LOCATION_CODE = '''+@P_Location+''' and ACCT_NUM = '''+@P_AcctNum+''''
그리고, 변수 타입이 CHAR 네요? VARCHAR 로 바꾸셔야 할 듯.


by 초보DB [2017.10.26 10:26:47]

답변감사드립니다. 말씀대로 바꿔보았는데 Inccorect syntax near '+' 에러뜨네용..

Incorrect syntax naer '+'. Expecting ')'. 이런거 뜹니다 ㅠㅠ


by 마농 [2017.10.26 10:35:33]

다른 방법도 알려드렸는데 해보셨나요?
where 절을 밖으로 빼는 방법


by 초보DB [2017.10.26 10:40:02]

네 where절 밖으로 빼봤는데 실행은 되는데 몇분넘도록 결과값이 안나옵니다... ㅠㅠ


by 마농 [2017.10.26 10:42:18]

계속 모래시계 돈다는 의미인가요?
그러면 락 걸린거 아닌지 의심해 보세요.


by 초보DB [2017.10.26 10:48:38]

네 계속 모래시계가 돕니당.. 임의로 데이터넣어서 테스트해보면 잘되는데ㅠㅠ


by 마농 [2017.10.26 11:16:14]

+ 가 안먹히네요.
파라미터를 오픈쿼리에 넘기려면 전체 쿼리(메인쿼리 + 오픈쿼리)를 변수에 담아 실행해야 하는가 봅니다.
메인쿼리 + 오픈쿼리 의 다단계 구조가 되어 따옴표 처리가 상당히 복잡해 지겠네요.

create PROCEDURE P_dataUpdate
( @P_Location IN VARCHAR{1000}  -- char -> varchar
, @P_AcctNum  IN VARCHAR{1000}  
, @P_UsrID    IN VARCHAR{1000}  
, @P_SeqNum Numeric
, @P_SegCnt Numeric
)
AS
DECLARE @SQL VARCHAR(max)
BEGIN
  insert into openquery(ERSCACU, 'select * FROM CACSUSR.P325CCH')
  values ( @P_Location, @P_AcctNum, @P_SeqNum, 0, ' '
         , convert(varchar,getdate(),12)
         , left(replace(convert(varchar(12),getdate(),8),':',''),4)
         , 'IC','A','O',0,0,0,0,' ',' ',' ',@P_UsrID,' ',' ',' ',' ',' ',' '
         ) ;
  SET @SQL = 'update openquery(ERSCACU, '
           + '''select * from CACSUSR.P325PRI'
           + ' where LOCATION_CODE = ''''' + @P_Location + ''''''
           + ' and ACCT_NUM = ''''' + @P_AcctNum + ''''''')'
           + ' set LOW_CODED_HIST_SEQ= ' + CAST(@P_SeqNum AS VARCHAR)
           + '   , CODED_HIST_SEG_CNT= ' + CAST(@P_SegCnt AS VARCHAR)
  EXEC (@SQL)
END

 


by 초보DB [2017.10.26 11:43:52]

와.. 정말감사드립니다 ㅠㅠ 덕분에 많이배우고갑니다 ㅠㅠㅠㅠㅠ

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입