2

我在名为 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

有人可以建议我做错了什么,因为我无法识别我缺少的关键词

谢谢。

4

1 回答 1

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;
/
于 2011-03-25T10:05:09.337 回答