【问题标题】:Error 201 select identifier must be declared必须声明错误 201 选择标识符
【发布时间】:2011-12-04 21:42:39
【问题描述】:

我正在尝试通过 Oracle 的表单生成器创建一个登录表单,我有一个名为 TRAVEL_USER 的表,它是在 SQLPlus 中创建的。

我已经制作了一个按钮,并且正在使用触发器 WHEN-BUTTON-PRESSED。

首先,我使用此代码来简单地计算在系统上注册的用户数量:

DECLARE
    TUsers NUMBER := 0;
BEGIN
    SELECT COUNT(*) FROM TRAVEL_USER;
END;

编译时出现以下错误: 错误 201:必须声明标识符“TRAVEL_USER”。

我可以确认此表存在于我正在连接的数据库中,我通过 SQLPlus 和 Oracle Forms Builder 中的数据块向导进行了检查。

我以完全管理员权限(使用系统用户名)连接到数据库。

【问题讨论】:

    标签: sql forms oracle select


    【解决方案1】:

    哪个用户拥有 TRAVEL_USER 表?如果您以用户 SYSTEM(坏主意)的身份连接,那么您可能需要使用拥有该表的架构名称来完全限定表名:

    SELECT COUNT(*) FROM owner.travel_user;
    

    或者为表创建一个公共同义词:

    CREATE PUBLIC SYNONYM travel_user FOR owner.travel_user;
    

    您不应养成将 SYS 或 SYSTEM 帐户用于应用目的的习惯。它们是系统帐户,应用于系统用途。

    【讨论】:

      【解决方案2】:

      (最好的方法是)

      DECLARE
      SNAME NUMBER:=0;
      BEGIN
      SELECT COUNT(*) INTO SNAME FROM TRAVEL_USER;
      :PCOUNT:=SNAME;
      END;
      

      我在 ORACLE FORM BUILDER 10G 中实际使用了它,它可以正常工作

      首先从表中选择计数到变量(SNAME)中,然后创建一个像(PCOUNT)这样的显示项目,然后将 SNAME 的值分配给 PCOUNT

      我在按下按钮时使用此代码,它可以正常工作

      【讨论】:

      • kleopatra 大写锁定不影响结果,我使用的是 oracle 10g,据我所知,大写锁定代码工作正常,我已经尝试过了
      • @nitin-sharma 机器不是问题,人类是:阅读大写文本非常烦人,尤其是在代码没有明确分隔的情况下。我的反对票一直持续到那个烂摊子被清理干净
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-14
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多