尝试将查询的结果(owner,object_name)提供给DBMS_STATS我尝试了以下PL / SQL片段:
DECLARE
CCLOB VARCHAR2(500);
BEGIN
FOR rec IN (
select o.owner own,o.object_name obn
from sys.col_group_usage$ cg,dba_objects o
where cg.obj#=o.object_id
group by owner,object_name
)
LOOP
DBMS_OUTPUT.put_line (rec.own||' '||rec.obn);
SELECT dbms_stats.report_col_usage(ownname =>'''rec.own''', tabname =>'''rec.obn''') into CCLOB from dual;
DBMS_OUTPUT.PUT_LINE(CCLOB);
END LOOP;
END;
/
但结果是:
DWI DWATOBP
ORA-20001: 'REC.OWN' is an invalid identifier
################SNPI#################
AGUN RDC
ORA-20001: 'REC.OWN' is an invalid identifier
PL/SQL procedure successfully completed.
代码的一些变体及其错误:
a)没有引号:
SELECT dbms_stats.report_col_usage(ownname =>rec.own, tabname =>rec.obn) into CCLOB from dual;
DWI DWATOBP
DECLARE
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 14
b)单引号:
SELECT dbms_stats.report_col_usage(ownname =>'rec.own', tabname =>'rec.obn') into CCLOB from dual;
DWI DWATOBP
ORA-20001: REC.OWN is an invalid identifier
c)有两个单引号:
SELECT dbms_stats.report_col_usage(ownname =>''rec.own'', tabname =>''rec.obn'') into CCLOB from dual;
ERROR at line 14:
ORA-06550: line 14, column 54:
PL/SQL: ORA-00907: missing right parenthesis
ORA-06550: line 14, column 7:
PL/SQL: SQL Statement ignored
答案 0 :(得分:2)
将参数传递给'' '''''和'' rec.obn''',你实际上是在传递字符串:' rec.own'和' rec.obn'。这些都不是有效的标识符名称!
删除单引号,它应该有效。
ETA:另外,将变量CCLOB更改为CLOB数据类型,因为dbms_stats.report_col_usage返回CLOB。