Plsql 使用SELECT BEGIN END查询PL/SQL

Plsql 使用SELECT BEGIN END查询PL/SQL,plsql,oracle11g,Plsql,Oracle11g,我是初级oracle dba,对PL/SQL有疑问。你能给我一些建议吗? 我想知道是否可以将SELECT查询放入BEGIN。。。以线轴结束。 此代码的目的是使用数组内容作为SELECT FROM的源。 非常感谢你的帮助。 下面是我的shell脚本,其中包含PL/SQL代码,但它不起作用: #! /bin/bash $ORACLE_HOME/bin/sqlplus "sysmonitor/********" << EOF declare type array_t is table

我是初级oracle dba,对PL/SQL有疑问。你能给我一些建议吗? 我想知道是否可以将SELECT查询放入BEGIN。。。以线轴结束。 此代码的目的是使用数组内容作为SELECT FROM的源。 非常感谢你的帮助。 下面是我的shell脚本,其中包含PL/SQL代码,但它不起作用:

#! /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
Spool是SQL命令。
它不能在匿名PL/SQL块内使用。

不,这是不可能的。Spool是一个SQL*Plus命令,因此需要将它放在匿名PL/SQL块外。此外,SPOOL将重定向输出,因此您需要打印选择的结果。看看这个问题的答案:@klaslindb228ck非常感谢~:D我现在开始检查它~对不起。。。我想我有新问题了。循环选择表(DBUSER_UNEW_TABLE1、DBUSER_UNEW_TABLE2、DBUSER_UNEW_TABLE3)后,如何将每个结果假脱机到单个文件中?我试过下面这个,但它不工作$ORACLE\u HOME/bin/sqlplus“sysmon/systex”非常感谢您的建议!~:D根据建议,我能按以下方式做吗?spool test.log从1..array.count循环中的i开始从数组(i)中选择*;端环;结束;关闭/如果你认为这个答案已经回答了你的问题,那么请勾选帖子旁边的复选框。
$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
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;
/