Escrevi um script PL/SQL para encontrar o tamanho de uma longa coluna em uma tabela. Apenas para tornar o script genérico, estou passando o nome da tabela e o nome da coluna como variáveis, mas estou recebendo um erro dizendo que a tabela ou exibição não existe. os detalhes são:
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
O roteiro é:
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;
O nome da tabela é FILES. E o nome da coluna é FILESIZES.
Você pode sugerir o que estou fazendo de errado. E o que posso fazer para encontrar o tamanho da coluna longa?
Obrigado.
O erro no seu script é que o script agora espera uma tabela chamada tablename, com uma coluna chamada columnname. Nesse caso, você não conhece os nomes das tabelas e colunas, portanto, deve usar o sql dinâmico para executá-lo. Além disso, se possível, esqueça LONG e implemente lobs.
Para obter o documento, consulte http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057
código de amostra ligeiramente modificado para atender às suas necessidades: