如何在表中查找长列的长度

时间:2011-03-25 08:23:17

标签: oracle plsql oracle10g ora-00905

我在一个名为Files的表中有一个名为FileSize的LONG列。

为实现这一目标,我做了以下工作:

我写了这个PL / SQL脚本来查找大小

declare 
long_var LONG:=0;
begin
dbms_output.put_line(length(long_var));
  execute immediate 'SELECT FILESIZE INTO long_var FROM FILES';
    dbms_output.put_line(length(long_var));
end;

但它引发了一个错误:

ORA-00905: missing keyword
ORA-06512: at line 5

当我看到下面给出的链接时,我正在做以下事情: http://www.techonthenet.com/oracle/questions/long_length.php

有人可以提出我做错了什么,因为我无法确定我错过的关键词

感谢。

1 个答案:

答案 0 :(得分:6)

在此上下文中您不需要EXECUTE IMMEDIATE。

DECLARE 
long_var long:=0;
BEGIN
  DBMS_OUTPUT.PUT_LINE(LENGTH(long_var));
  SELECT filesize INTO long_var FROM files;
  DBMS_OUTPUT.PUT_LINE(LENGTH(long_var));
END;
/

EXECUTE IMMEDIATE从PL / SQL代码运行SQL的独立语句。它不能向您的代码返回任何内容。您使用的语句不是有效的SQL,因此您获得了ORA-00905。它是有效的PL / SQL代码,因此一旦删除了EXECUTE IMMEDIATE就可以正常工作。

修改

您的后续问题的代码:要使用多行执行此操作,您可以使用此

DECLARE 
  CURSOR C1 IS
  SELECT filesize FROM files;
BEGIN
  FOR files IN c1
  LOOP
    DBMS_OUTPUT.PUT_LINE(LENGTH(files.filesize));
  END LOOP;
END;
/