Oracle shell脚本-使用dbms_metadata.get_ddl调用变量时出错

zmeyuzjn  于 2023-06-05  发布在  Oracle
关注(0)|答案(1)|浏览(339)

下面是一个冗长的脚本的代码片段。下面的代码用于从RESULT 1的输出中提取DDL。但是,它无法生成输出,并给出以下错误。如果你能解释一下下面的问题,我将不胜感激。
验证码:-

`RESULT1=`sqlplus -s 'system/'$DBSYS'@PROD'  2>/dev/null <<EOF
   set feedback off
   set heading off
   select view_name from dba_views where view_name like '%DB2%';
EOF`

VIEWS_DDL=`sqlplus -s 'system/'$DBSYS'@PROD'  2>/dev/null <<EOF|tail -1
   set feedback off heading off long 99999 linesize 1234 pages 1234
   spool $LOCSC/DB2_VIEWS_$RQNUM.sql
   select dbms_metadata.get_ddl('VIEW','$RESULT1','DATA_OWNER') from dual;
   spool off
EOF``

当脚本运行时,理想情况下它应该在通过spool文件调用的位置为视图生成DDL,但是在spool文件中给出了以下错误。
输出:-

SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
SP2-0734: unknown command beginning "DB2_OPORTR..." - rest of line ignored.
SP2-0734: unknown command beginning "DB2_DGORDP..." - rest of line ignored.
SP2-0734: unknown command beginning "DB2_DGORDP..." - rest of line ignored.
SP2-0734: unknown command beginning "DB2_SOPOGI..." - rest of line ignored.
SP2-0044: For a list of known commands enter HELP
and to leave enter EXIT.
yh2wf1be

yh2wf1be1#

您对SQL*Plus的第一次调用返回多个值,您将尝试在第二次调用中使用这些值,而第二次调用只需要一个值。
你不需要两个查询,你可以将它们组合为:

select dbms_metadata.get_ddl('VIEW',view_name,'DATA_OWNER')
from dba_views
where view_name like '%DB2%';

尽管您可能希望将查询限制为在函数调用中指定的同一用户,如:

select dbms_metadata.get_ddl('VIEW',view_name,'DATA_OWNER')
from dba_views
where owner = 'DATA_OWNER'
and view_name like '%DB2%';

或者只使用一个引用,在函数调用中也使用表列值:

select dbms_metadata.get_ddl('VIEW',view_name,owner)
from dba_views
where owner = 'DATA_OWNER'
and view_name like '%DB2%';

您可能需要查看set_transform_param来修改DDL的显示方式。

相关问题