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

来源:互联网 发布:网络电视看电视节目 编辑:程序博客网 时间:2024/06/05 06:52

 在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退出。

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

DECLAREV_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语句 , 没有这个斜杠语句会一直换行 换行 换行....