求助:我的写法有错吗?ORA-00984,ORA-06512错误..?
DECLARE
CURSOR c_br IS SELECT * FROM broker_ret;
CURSOR c_hfhd (p_cuno VARCHAR2) IS
SELECT * FROM hs_his.hisfuholddrop
WHERE fund_account=p_cuno;
r_br broker_ret%ROWTYPE;
r_hfhd hs_his.hisfuholddrop%ROWTYPE;
BEGIN
OPEN c_br;
LOOP
FETCH c_br INTO r_br;
EXIT WHEN c_br%NOTFOUND;
DBMS_OUTPUT.PUT_LINE( 'part1 ok! ');
OPEN c_hfhd(r_br.cust_no);
LOOP
FETCH c_hfhd INTO r_hfhd;
EXIT WHEN c_hfhd%NOTFOUND;
IF r_br.ret_mode= '1 '
THEN execute immediate 'insert into broker_fund values
(r_hfhd.initdate,r_br.broker_no,r_br.cust_no,r_br.exch_code,r_br.vari_code,r_br.ret_mode,r_br.amt,r_br.business_amount*amt) ';
END IF;
IF r_br.ret_mode= '2 '
THEN execute immediate 'insert into broker_fund(tx_date,broker_no,cust_no,exch_code,vari_code,ret_mode,amt,fare) values
(r_hfhd.initdate,r_br.broker_no,r_br.cust_no,r_br.exch_code,r_br.vari_code,r_br.ret_mode,r_br.amt,r_br.total_fare*amt) ';
END IF;
IF r_br.ret_mode= '3 '
THEN execute immediate 'insert into broker_fund values
(r_hfhd.initdate,r_br.broker_no,r_br.cust_no,r_br.exch_code,r_br.vari_code,r_br.ret_mode,r_br.amt,(r_br.total_fare-r_br.exch_fare)*amt) ';
END IF;
IF r_br.ret_mode= '4 '
THEN execute immediate 'insert into broker_fund values
(r_hfhd.initdate,r_br.broker_no,r_br.cust_no,r_br.exch_code,r_br.vari_code,r_br.ret_mode,r_br.amt,r_br.total_fare*amt) ';
END IF;
END LOOP;
CLOSE c_hfhd;
DBMS_OUTPUT.PUT_LINE( 'part2 ok! ');
END LOOP;
CLOSE c_br;
END;
ORA-00984列在此处不允许,ORA-06512错误 在line23..?
我是搞了2个游标嵌套在一起,然后向第3张表里插记录,谁能帮我看看怎么回事..上网插过好久也没有解决...麻烦大家了.谢谢!
[解决办法]
execute immediate 'insert into broker_fund values
(r_hfhd.initdate,r_br.broker_no,r_br.cust_no,r_br.exch_code,r_br.vari_code,r_br.ret_mode,r_br.amt,(r_br.total_fare-r_br.exch_fare)*amt) '
该语句写错了,你的变量在这全变成了字符串了,可以使用
declare
....
amt1 number;
begin
....
amt1 := r_br.total_fare*amt;
execute immediate 'insert into broker_fund(tx_date,broker_no,cust_no,exch_code,vari_code,ret_mode,amt,fare) values
(:initdate,:broker_no,:cust_no,:exch_code,:vari_code,:ret_mode,:amt,:total_fare) '
using r_hfhd.initdate,r_br.broker_no,r_br.cust_no,r_br.exch_code,r_br.vari_code,r_br.ret_mode,r_br.amt,amt1;
....
end ;
[解决办法]
IF r_br.ret_mode= '2 '
把该情况的sql单独在数据库里执行一下看看有没有什么错误 ...
