sqlplus下不能执行批处理的原因

 在pl/sql中可以正确的执行,但SQLPLUS执行不了的SQL批处理语句:

 

写了一个批量删除数据的批处理升级SQL语句upgrade_cbsparam.sql,如下:

DECLARE
V_LOGNUM NUMBER;
V_NEEDARC NUMBER;
BEGIN
     SELECT count(1) INTO V_LOGNUM FROM V$LOG;
     LOOP
         LOOP
             SELECT count(1) INTO V_NEEDARC FROM V$ARCHIVE;
             IF V_NEEDARC < V_LOGNUM - 1 THEN
                EXIT;
             ELSE
                DBMS_LOCK.SLEEP(60);
             END IF;
         END LOOP;

         DELETE FROM sellcard where pkdate between to_date('2004-09-01 00:00:00','yyyy-mm-dd hh24:mi:ss')   AND to_date('2004-09-01 23:59:59','yyyy-mm-dd hh24:mi:ss') AND rownum < 100;
         IF SQL%ROWCOUNT = 0 THEN
            EXIT;
         END IF;
         COMMIT;
     END LOOP;
END;

以前语句在pl/sql中可以正确的执行,但在SQLPLUS中执行时却没有反应,在SQLPLUS中执行时现象如下:
SQL> @ upgrade_cbsparam.sql

24
25
26
27
28

输入@upgrade_cbsparam.sql后回车就会换到下一行并显示24,每一回车就会换到下一行,最后只能exit退出。

解决办法:在脚本的最后一行, 添加一个斜杠 / , 斜杠前面不要有任何字符^_^

DECLARE
V_LOGNUM NUMBER;
V_NEEDARC NUMBER;
BEGIN
     SELECT count(1) INTO V_LOGNUM FROM V$LOG;
     LOOP
         LOOP
             SELECT count(1) INTO V_NEEDARC FROM V$ARCHIVE;
             IF V_NEEDARC < V_LOGNUM - 1 THEN
                EXIT;
             ELSE
                DBMS_LOCK.SLEEP(60);
             END IF;
         END LOOP;

         DELETE FROM sellcard where pkdate between to_date('2004-09-01 00:00:00','yyyy-mm-dd hh24:mi:ss')   AND to_date('2004-09-01 23:59:59','yyyy-mm-dd hh24:mi:ss') AND rownum < 100;
         IF SQL%ROWCOUNT = 0 THEN
            EXIT;
         END IF;
         COMMIT;
     END LOOP;
END;
/
这个斜杠才表明你要这行对应的 匿名块sql语句 , 没有这个斜杠语句会一直换行 换行 换行..



 

这个斜杠才表明你要这行对应的 匿名块sql语句 , 没有这个斜杠语句会一直换行 换行 换行....

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值