Bash 在SQLPlus中运行循环
我制作了一个bash脚本,通过SQLPlus连接到数据库,并运行一个包含For循环的SQL脚本,如下所示。但一旦运行它,它就卡在循环的开头,如下所示。我试图通过SQLPlus直接运行它,结果是一样的。那么,谁能告诉我这里做错了什么Bash 在SQLPlus中运行循环,bash,oracle,loops,plsql,sqlplus,Bash,Oracle,Loops,Plsql,Sqlplus,我制作了一个bash脚本,通过SQLPlus连接到数据库,并运行一个包含For循环的SQL脚本,如下所示。但一旦运行它,它就卡在循环的开头,如下所示。我试图通过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
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
狂欢节:
编辑:这是我在末尾添加斜杠后得到的结果
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\u输出的结果放入文件
通过使用.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
)文件:
在最后一个分号后的末尾添加斜杠,并在开头添加set serveroutput on
。您的问题,然后发布bash脚本的内容。我假设您正在调用get“sql script”
而不是start“sql script”
sql*Plus需要用斜杠终止PL/sql块,否则它不知道代码的结尾在哪里。@Barbaros?zhan我这样做了,但仍然不起作用,也没有输出。SQL>打开服务器输出;SQL>在1..10循环DBMS_输出中为l_计数器开始。放置_行(l_计数器| |“完成”);端环;完;2 3 4 5 6 7 8 9 10 a slash必须在新的线路上。非常感谢与我一起工作。@AhmedZein不客气,兄弟,很高兴能帮上忙
$ cd /home/genesys/scripts
$ sqlplus /nolog
SQL> conn un/pwd
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
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