日期:2014-05-17  浏览次数:21118 次

想在oracle数据库里面用动态的sql向表中插入10000条数据,但是老报错,望指点下!
CREATE OR REPLACE PROCEDURE test(sqls Varchar2)
AS
BEGIN
  FOR i IN 1..10000 LOOP
  EXECUTE IMMEDIATE sqls;
  END LOOP;
END test;


DECLARE
  sqls Varchar2(100);
BEGIN
  sqls:='insert into cst_customer values(cst_customer_seq.nextval,'三毛'||cst_customer_seq.nextval,'北京','100001','刘颖',3,'合作伙伴',
4,2,'武昌','420305','13678945612','400800','www.wrsvse.com','wr2012','大头儿子','200000.00','30000.00','中国银行','456123456','ds2012','gs2012','3');
insert into cst_customer values(cst_customer_seq.nextval,'聪海信息科技有限公司','华北','100002','admin',
3,'大客户',4,2,'凤凰','220450','13678998765','400110','www.chxxkj.com','ch2012','大老鼠','500000.01','100000.30','中国工商银行','456654321','ds2012','gs2012','1')';
  test(sqls);
END;


ORA-06550: 第 4 行, 第 99 列: 
PLS-00103: 出现符号 "三毛"在需要下列之一时:
 * & = - + ; < / > at in is
  mod remainder not rem <an exponent (**)> <> or != or ~= >= <=
  <> and or like LIKE2_ LIKE4_ LIKEC_ between || multiset
  member SUBMULTISET_



------解决方案--------------------
动态sql里边的变量都加2个单引号, eg: ''三毛''||cst_customer_seq.nextval
------解决方案--------------------
用动态SQL干吗啊,直接 insert 不就好了?
------解决方案--------------------
二楼说的正解。
补充一点,你这么做的过程中,循环变量i没有利用啊,感觉不好的地方就是,很容易产生主键冲突的可能性啊。
还不如直接放在存储过程中,或者一个匿名过程,解决你的需求。
------解决方案--------------------
動態SQL裏面的條件值,因為要保持'三毛'的形式,需要用雙引號。
------解决方案--------------------
三毛是用双引号的。你可以试试
dbms_output.put_line('''');
dbms_output.put_line(''');
可以试试去看看结果,希望能够帮到你吧!