2012-01-05 4 views
0
create or replace 
procedure prdBandwidth 
is 
    cursor c_bandwidth is select distinct mt.name bwname,b.circuitno circuitno,subapp.customerno customerno,netinfo.bandwidthtype bandwidthtype from wom.tbltsubscriberapplication subapp,wom.tbltllnetworkinfo netinfo,wom.tblmmastertype mt,(select max(applicationdate) as maxdate,circuitno,customerno from wom.TBLTSUBSCRIBERAPPLICATION,tblmaccount where nodename='End' and accountnumber=customerno group by circuitno, customerno) b where subapp.applicationdate=b.maxdate and subapp.circuitno=b.circuitno and subapp.llnetworkinfoid=netinfo.id and netinfo.bandwidthtype=mt.id; 
    bwtype varchar2(6); 
    bwtypelen number; 
    bwtypesublen number; 
    bwvalue varchar2(8); 
     kbpsdata number; 
begin 
    DBMS_OUTPUT.PUT_LINE('hhahahahah'); 
    for crs_bandwidth in c_bandwidth 
    loop 
    bwtypelen:=length(crs_bandwidth.bwname); 
    DBMS_OUTPUT.PUT_LINE('bwtypelen:::'+bwtypelen); 
    bwtype:=substr(crs_bandwidth.bwname,-4,4); 
    DBMS_OUTPUT.PUT_LINE('bwtype:::'+bwtype); 
    bwtypesublen:=length(bwtype); 
    DBMS_OUTPUT.PUT_LINE('bwtypesublen:::'+bwtypesublen); 
    bwtypesublen:=bwtypesublen-1; 
    DBMS_OUTPUT.PUT_LINE('bwtypesublen:::'+bwtypesublen); 
    bwvalue:=substr(crs_bandwidth.bwname,bwtypesublen,bwtypesublen); 
    DBMS_OUTPUT.PUT_LINE('bwvalue:::'+bwvalue); 
    if bwtype='mbps' then 
     DBMS_OUTPUT.PUT_LINE('bwtype in if condition:::'+bwvalue); 
     bwvalue:=bwvalue*1024; 
     DBMS_OUTPUT.PUT_LINE('bwtype in if condition:::'+bwvalue); 
    end if; 
    update TBLMLEASEDLINECUSTOMER set BANDWIDTH=bwvalue where CUSTOMERID = (select CUSTOMERID from TBLMCUSTOMER where accountnumber=crs_bandwidth.customerno); 
    end loop; 
    commit; 
end; 

Ошибка при запуске в строке 36 в команде:Числовой или значение ошибки: характер ошибки преобразования номер

exec prdBandwidth 

Сообщение об ошибке:

ORA-06502: PL/SQL: numeric or value error: character to number conversion error 
ORA-06512: at "JISPBILCORBILLINWOM501.PRDBANDWIDTH", line 14 
ORA-06512: at line 1 
06502. 00000 - "PL/SQL: numeric or value error%s" 
*Cause:  
*Action: 

это код

ответ

7

В ваши заявления DBMS_OUTPUT.PUT_LINE, попробуйте использовать '||' как оператор конкатенации, а не «+».

+0

+1 Я собираюсь добавить это в свой список причин не использовать DBMS_OUTPUT для отладки нашего кода. – APC

+5

@ APC: существует множество причин не использовать DBMS_OUTPUT, но эта ошибка не имеет ничего общего с ними и является результатом использования неправильного оператора, что приведет к синтаксической или семантической ошибке в PL/SQL-операции или оператор SQL или любой другой язык – symcbean