【发布时间】:2021-05-23 20:41:01
【问题描述】:
我制作了一个 bash 脚本,它通过 SQLPlus 连接到数据库并运行一个包含 For 循环的 SQL 脚本,如下所示。但是一旦运行它,它就会卡在循环的 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
重击:
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
【问题讨论】:
-
在最后一个分号之后添加一个斜线,并在开头添加
set serveroutput on。 -
edit 您的问题并发布 bash 脚本的内容。我假设你打电话给
get "sql script"而不是start "sql script" -
SQL*Plus 需要用斜杠终止 PL/SQL 块,否则它不知道代码的结尾在哪里。
-
@Barbaros?zhan 我这样做了,但仍然无法正常工作并且没有输出。 SQL> 设置服务器输出; SQL> BEGIN FOR l_counter IN 1..10 循环 DBMS_OUTPUT.PUT_LINE( l_counter || '完成');结束循环;结束;/ 2 3 4 5 6 7 8 9 10
-
新行必须有斜线
标签: bash oracle loops plsql sqlplus