运行 SQLPlus 中的循环
Running Loops in SQLPlus
我制作了一个 bash 脚本,它通过 SQLPlus 连接到数据库,并且 运行s 一个 SQL 脚本,其中包含一个 For 循环,如下所示。但是一旦 运行ning 它,它就会卡在循环的 BEGIN 中,如下所示。我尝试通过 SQLPlus 直接 运行 它,它是一样的。所以谁能告诉我这里做错了什么。
BEGIN
FOR l_counter IN 1..5
LOOP
DBMS_OUTPUT.PUT_LINE( l_counter );
END LOOP;
END
结果:
BEGIN
2 FOR l_counter IN 1..5
3 LOOP
4 DBMS_OUTPUT.PUT_LINE( l_counter );
5 END LOOP;
6 END;
7
8
Bash:
SPOOL $FILE
@/home/genesys/scripts/Counter.sql
SPOOL OFF
EXIT
EOF
编辑:这是我在末尾添加斜杠后得到的结果。
SQL> set serveroutput on;
SQL> BEGIN
FOR l_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE( l_counter || ' finished ');
END LOOP;
END;/ 2 3 4 5 6
7
8
9
10
为了将 DBMS_OUTPUT.PUT_LINE
命令的结果放入文件
,您可以更喜欢使用以下两种方法之一
- 通过使用
.sql
文件
$ cd /home/genesys/scripts
$ sqlplus /nolog
SQL> conn un/pwd
SQL> @Counter.sql
其中 Counter.sql
文件具有以下内容:
SET FEEDBACK OFF
SET SERVEROUTPUT ON
SPOOL output2.txt
BEGIN
FOR l_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(l_counter || ' finished ');
END LOOP;
END;
/
SPOOL OFF
- 通过创建
.sh
(Counter.sh
) 文件:
record=`sqlplus -S /nolog << EOF
conn hr/hr
SET FEEDBACK OFF
SET SERVEROUTPUT ON
SPOOL output.txt
BEGIN
FOR l_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(l_counter || ' finished ');
END LOOP;
END;
/
SPOOL OFF
EOF`
从创建文件的命令提示符调用
$ cd /home/genesys/scripts
$ . Counter.sh
我制作了一个 bash 脚本,它通过 SQLPlus 连接到数据库,并且 运行s 一个 SQL 脚本,其中包含一个 For 循环,如下所示。但是一旦 运行ning 它,它就会卡在循环的 BEGIN 中,如下所示。我尝试通过 SQLPlus 直接 运行 它,它是一样的。所以谁能告诉我这里做错了什么。
BEGIN
FOR l_counter IN 1..5
LOOP
DBMS_OUTPUT.PUT_LINE( l_counter );
END LOOP;
END
结果:
BEGIN
2 FOR l_counter IN 1..5
3 LOOP
4 DBMS_OUTPUT.PUT_LINE( l_counter );
5 END LOOP;
6 END;
7
8
Bash:
SPOOL $FILE
@/home/genesys/scripts/Counter.sql
SPOOL OFF
EXIT
EOF
编辑:这是我在末尾添加斜杠后得到的结果。
SQL> set serveroutput on;
SQL> BEGIN
FOR l_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE( l_counter || ' finished ');
END LOOP;
END;/ 2 3 4 5 6
7
8
9
10
为了将 DBMS_OUTPUT.PUT_LINE
命令的结果放入文件
- 通过使用
.sql
文件
$ cd /home/genesys/scripts
$ sqlplus /nolog
SQL> conn un/pwd
SQL> @Counter.sql
其中 Counter.sql
文件具有以下内容:
SET FEEDBACK OFF
SET SERVEROUTPUT ON
SPOOL output2.txt
BEGIN
FOR l_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(l_counter || ' finished ');
END LOOP;
END;
/
SPOOL OFF
- 通过创建
.sh
(Counter.sh
) 文件:
record=`sqlplus -S /nolog << EOF
conn hr/hr
SET FEEDBACK OFF
SET SERVEROUTPUT ON
SPOOL output.txt
BEGIN
FOR l_counter IN 1..10
LOOP
DBMS_OUTPUT.PUT_LINE(l_counter || ' finished ');
END LOOP;
END;
/
SPOOL OFF
EOF`
从创建文件的命令提示符调用
$ cd /home/genesys/scripts
$ . Counter.sh