我是初级oracle dba,对PL / SQL有疑问。请你给我一些建议吗? 我想知道是否可以将SELECT查询放入BEGIN ... END与SPOOL。 此代码的目的是使用数组内容作为SELECT FROM的源。 非常感谢您的帮助。 这是我的PL / SQL代码的shell脚本,它不起作用:
#! /bin/bash
$ORACLE_HOME/bin/sqlplus "sysmonitor/********" << EOF
declare
type array_t is table of varchar2(30);
array array_t := array_t(
'DBUSER_UNEW_TABLE1',
'DBUSER_UNEW_TABLE2',
'DBUSER_UNEW_TABLE3'
);
begin
for i in 1..array.count loop
spool test.log
select * from array(i);
spool off;
end loop;
end;
/
EOF
在阅读下面的好人的建议后,我做了一些改动,如下所示。但是,在循环SELECT表(DBUSER_UNEW_TABLE1,DBUSER_UNEW_TABLE2,DBUSER_UNEW_TABLE3)之后,我仍然不知道如何将每个结果假脱机。请你给我一些建议吗?
$ORACLE_HOME/bin/sqlplus "sysmonitor/********" << EOF
declare
type array_t is table of varchar2(30);
array array_t := array_t(
'DBUSER_UNEW_TABLE1',
'DBUSER_UNEW_TABLE2',
'DBUSER_UNEW_TABLE3'
);
begin
for i IN 1 .. array.count
loop
select * from array(i);
end loop;
end;
spool test.log
select * from array(i);
spool off
exit
EOF
如果我在sqlplus命令行下运行sql代码,则会引发错误。 select * from array(i); * 第11行的错误: ORA-06550:第11行,第20栏: PL / SQL:ORA-00933:SQL命令未正确结束 ORA-06550:第11行第1列: PL / SQL:忽略SQL语句
declare
type array_t is table of varchar2(30);
array array_t := array_t(
'DBUSER_UNEW_TABLE1',
'DBUSER_UNEW_TABLE2',
'DBUSER_UNEW_TABLE3'
);
begin
for i IN 1 .. array.count
loop
select * from array(i);
end loop;
end;
/
答案 0 :(得分:0)
Spool是SQL命令。 它不能在匿名PL / SQL块中使用。