AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 1907
Accepted
Egalitarian
Egalitarian
Asked: 2011-03-26 03:06:06 +0800 CST2011-03-26 03:06:06 +0800 CST 2011-03-26 03:06:06 +0800 CST

在 FOR 循环中引用 PL/SQL 变量

  • 772

我编写了一个 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。

你能建议我做错了什么吗?我该怎么做才能找到长列的大小?

谢谢。

oracle-10g plsql
  • 1 1 个回答
  • 9792 Views

1 个回答

  • Voted
  1. Best Answer
    ik_zelf
    2011-03-26T03:27:49+08:002011-03-26T03:27:49+08:00

    您脚本中的错误是脚本现在需要一个名为 tablename 的表,其中包含一个名为 columnname 的列。在这种情况下,您不知道表名和列名,因此您应该使用动态 sql 来运行它。除此之外,如果可能的话,忘记 LONG 并实现 lobs。

    有关文档,请参阅http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057

    示例代码稍作修改以满足您的需求:

    decLARE
      TYPE EmpCurTyp  IS REF CURSOR;
      v_emp_cursor    EmpCurTyp;
      v_stmt_str      VARCHAR2(200);
      z               long;
      x               number := 0;
      a               number;
      tablename       varchar2(100):= 'dba_views';
      columnname       varchar2(100):= 'text';
    BEGIN
      -- Dynamic SQL statement
      v_stmt_str := 'SELECT '||columnname||' from '||tablename;
      -- Open cursor
      OPEN v_emp_cursor FOR v_stmt_str;
      -- Fetch rows from result set one at a time:
      LOOP
          FETCH v_emp_cursor INTO z;
          EXIT WHEN v_emp_cursor%NOTFOUND;
          a:=UTL_RAW.LENGTH (UTL_RAW.CAST_TO_RAW(z));
          x:= x+a;
      END LOOP;
      -- Close cursor:
      CLOSE v_emp_cursor;
      dbms_output.put_line (x);
    END;
    /
    
    • 6

相关问题

  • 跟踪、调试和修复行锁争用

  • 当我尝试插入多于 1 行时出现“ORA-00911”错误

  • 在 C# 中执行 PL/SQL 脚本块

  • 如何删除对象上的锁?

  • 如何获取 Oracle Text Index 的底层虚拟 XML 文档?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    您如何显示在 Oracle 数据库上执行的 SQL?

    • 2 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    我可以查看在 SQL Server 数据库上运行的历史查询吗?

    • 6 个回答
  • Marko Smith

    如何在 PostgreSQL 中使用 currval() 来获取最后插入的 id?

    • 10 个回答
  • Marko Smith

    如何在 Mac OS X 上运行 psql?

    • 11 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Marko Smith

    将数组参数传递给存储过程

    • 12 个回答
  • Martin Hope
    Manuel Leduc PostgreSQL 多列唯一约束和 NULL 值 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler 什么时候应该将主键声明为非聚集的? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - 哪个更好作为主键? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick 如何优化大型数据库的 mysqldump? 2011-01-04 13:13:48 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve