2012-11-01 57 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; 

三江源

+0

什么是编译错误?我们不是心灵感应,没有模式对象,我们无法为自己编译代码。 – APC

回答

0

喜在这一部分,我看到一些错误

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; 

并打开/关闭使用不当(也许你试图使用游标)

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

我在遇到符号“THENSELECT”时期待以下其中一种和 遇到符号“OPEN” 我在这里没有得到wats的问题,请帮助 – 1001

0

它是每个SELECT语句的一个INTO子句。您不应该在此功能中关闭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; 

我认为你需要学会使用回车来提高你的代码的布局。