2012-11-01 6 views
-2

올바른 방법으로 아래의 절차를 수행하고 있는데 컴파일 오류가 있습니다. 누군가 내가 저지른 오류를 도와 줄 수 있습니까?경고 : 컴파일 오류가있는 절차

create or replace PROCEDURE CRangeproc(in_termid IN VARCHAR2,in_cardno IN VARCHAR2,outcount OUT NUMBER,outissu OUT VARCHAR2,outacq OUT VARCHAR2,CIssuer OUT SYS_REFCURSOR,CAcquirer OUT SYS_REFCURSOR) 
AS 
BEGIN 
select count(*) into outcount from cardrangetable where PAN_LOW <= in_cardno AND PAN_HIGH >= in_cardno and terminal_id = in_termid; 
if outCount = 1 then 
select ISSUERTABLEID into outissu,ACQUIRERTABLEID into outacq from cardrangetable where PAN_LOW <= in_cardno AND PAN_HIGH >= in_cardno and terminal_id = in_termid; 
Open CIssuer FOR 
select * from Issuer_tble where TERMINAL_ID = in_termid and ISSUERTABLEID = outissu; 
CLOSE CIssuer; 
Open CAcquirer FOR 
select * from ACQUIRERTABLE where TERMINAL_ID = in_termid and ACQUIRERID = outacq; 
CLOSE CAcquirer; 
end if; 
End CRangeproc; 

감사합니다 내가

if Outcount = 1 then 
select Issuertableid 
    into Outissu, Acquirertableid 
    into Outacq 
from Cardrangetable 
where Pan_Low <= In_Cardno 
    and Pan_High >= In_Cardno 
    and Terminal_Id = In_Termid; 

그것이

if Outcount = 1 then 
select Issuertableid, Acquirertableid 
    into Outissu, Outacq 
from Cardrangetable 
where Pan_Low <= In_Cardno 
    and Pan_High >= In_Cardno 
    and Terminal_Id = In_Termid; 

오픈/잘못 어쩌면 (사용 닫히고이 당신이있어처럼 할 몇 가지 오류가이 부분에

+0

컴파일 오류 란 무엇입니까? 우리는 텔레파시가 아니며 스키마 객체가 없으면 코드를 컴파일 할 수 없습니다. – APC

답변

0

안녕 커서를 사용하려고 함)

open Cissuer for 
    ------ 
close Cissuer; 
open Cacquirer for 
    ---- 
close Cacquirer; 
+0

다음 중 하나가 예상되면 Im에 "THENSELECT"기호가 표시되고 기호가 "OPEN"이 발생했습니다 여기에 문제가 발생하지 않았습니다. – 1001

0

SELECT 절당 하나의 절입니다. 이 함수에서는 REF CURSOR를 닫지 않아야합니다. 그것들을 소비하는 프로그램은 그것을 처리 할 필요가있다.

는이 코드를 좋아한다 무엇 :

create or replace PROCEDURE CRangeproc 
    (in_termid IN VARCHAR2 
    ,in_cardno IN VARCHAR2 
    ,outcount OUT NUMBER 
    ,outissu OUT VARCHAR2 
    ,outacq OUT VARCHAR2 
    ,CIssuer OUT SYS_REFCURSOR 
    ,CAcquirer OUT SYS_REFCURSOR) 
AS 
BEGIN 
    select count(*) 
    into outcount 
     from cardrangetable 
    where PAN_LOW <= in_cardno 
    AND PAN_HIGH >= in_cardno 
    and terminal_id = in_termid; 

    if outCount = 1 then 
     select ISSUERTABLEID,ACQUIRERTABLEID 
     into outissu, outacq 
       from cardrangetable 
     where PAN_LOW <= in_cardno 
     AND PAN_HIGH >= in_cardno 
     and terminal_id = in_termid; 
     Open CIssuer FOR 
      select * from Issuer_tble 
          where TERMINAL_ID = in_termid 
          and ISSUERTABLEID = outissu; 
     Open CAcquirer FOR 
      select * from ACQUIRERTABLE 
          where TERMINAL_ID = in_termid 
          and ACQUIRERID = outacq; 
    end if; 
End CRangeproc; 

난 당신이 캐리지 코드의 레이아웃을 개선하기 위해 반환 사용하는 방법을 배우게 할 필요가 있다고 생각합니다.