在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语句 , 没有这个斜杠语句会一直换行 换行 换行....
本文讨论了在SQLPLUS中执行PL/SQL批处理语句时遇到的问题,特别是关于批量删除数据的批处理升级SQL语句。通过在脚本末尾添加斜杠/来解决语句无限换行的问题。
5288

被折叠的 条评论
为什么被折叠?



