【问题标题】:how to find length of a Long Column in a table如何在表格中查找长列的长度
【发布时间】:2011-07-22 18:01:28
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: oracle plsql oracle10g ora-00905


    【解决方案1】:

    在这种情况下,您不需要 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;
    /
    

    【讨论】:

    • 现在我收到此错误:ORA-01422:精确提取返回的行数超过了请求的行数 ORA-06512:第 5 行
    • 您的 SELECT 只需要一行,但您有很多行,因此您需要使用 WHERE 子句对其进行过滤以仅获取一行。如果要获取多行的长度,则需要使用游标。或者,您可以将其制成一个函数,然后在普通的 select 语句中使用它。
    • 自从我使用 DBMS_OUTPUT 包以来已经有一段时间了。记得做“设置 serveroutput on” - 另外:不幸的是,当 LONG 列数据超过 32k 时,此方法失败(至少对于我的 32 位 SQL *加客户端)。要检测较大 LONG 值的长度,我必须使用此解决方案:stackoverflow.com/questions/5497238/…
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 2011-03-22
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多