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张表里插记录,谁能帮我看看怎么回事..上网插过好久也没有解决...麻烦大家了.谢谢!
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张表里插记录,谁能帮我看看怎么回事..上网插过好久也没有解决...麻烦大家了.谢谢!
解决方案 »
- 在装Oracle10g时 错误提示:”指定的SID本机上已存在 请指定一个不同的SID“该怎么办啊???
- oracle 817 imp 进行数据库恢复时 导到一个表的时候卡住了
- 如何oracle数据导出至db中?
- oracle中字段选择问题
- oracle中日期字段从EXCEL中导入,但是EXCEL的日期按照文本的方式保存!
- select 语句
- 大家oracle10g用过了没有?我怎么enterprise manager登陆不了??
- ●大家看这个存储过程在sql/plus 中怎么执行啊。
- 增加字段的sql脚本如何写
- 我的机器是C566,128M,跑oracle9还是oracle8?他们的区别是不是很大?
- 编译时出错,提示信息:ld: Unsatisfied symbol "sqlcxt" in file spacct.o
- pL/SQL DEVELOPER 7中 中文字符拷贝到其它软件例如Notepad会显示为乱码?
(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 ;