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