我编写了一个 PL/SQL 脚本来查找表中长列的大小。只是为了使脚本通用,我将表名和列名作为变量传递,但我收到一条错误消息,指出表或视图不存在。详情如下:
ORA-06550: line 8, column 34:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 8, column 11:
PL/SQL: SQL Statement ignored
ORA-06550: line 9, column 42:
PLS-00364: loop index variable 'J' use is invalid
ORA-06550: line 9, column 3:
PL/SQL: Statement ignored
脚本是:
declare
a number := 0;
x number := 0;
i number := 0;
tablename varchar2(100):= 'FILES';
columnname varchar2(100):= 'FILESIZE';
begin
for j in (select columnname from tablename) loop
a:=UTL_RAW.LENGTH (UTL_RAW.CAST_TO_RAW(j.columnname));
i := i+1;
dbms_output.put_line(i);
x:= x + a;
end loop;
dbms_output.put_line(x);
end;
表名是 FILES。列名是 FILESIZES。
你能建议我做错了什么吗?我该怎么做才能找到长列的大小?
谢谢。
您脚本中的错误是脚本现在需要一个名为 tablename 的表,其中包含一个名为 columnname 的列。在这种情况下,您不知道表名和列名,因此您应该使用动态 sql 来运行它。除此之外,如果可能的话,忘记 LONG 并实现 lobs。
有关文档,请参阅http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057
示例代码稍作修改以满足您的需求: