关于在BEGIN END之间使用SELECT的PL / SQL问题

时间:2014-03-12 08:21:08

标签: plsql oracle11g

我是初级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;
/

1 个答案:

答案 0 :(得分:0)

Spool是SQL命令。 它不能在匿名PL / SQL块中使用。