当前位置: 首页 > 知识库问答 >
问题:

尝试在查询中引用plsql表时出现Oracle pl/sql问题

步博涉
2023-03-14

当我尝试在查询中引用plsql表记录时,我收到pls-201错误。

下面是一个问题示例:

DECLARE
 TYPE trxtypeinforec IS RECORD(
    NAME ra_cust_trx_types.NAME%TYPE
    );

  TYPE trxtypeinfotab IS TABLE OF trxtypeinforec
   INDEX BY PLS_INTEGER;

   g_inv_type        trxtypeinfotab;
   l_result VARCHAR2 (100);

BEGIN
    g_inv_type(1).NAME := 'Test';

    SELECT g_inv_type(qry.ID).NAME
    INTO l_result
    FROM (SELECT 1 ID
            FROM dual) qry;

END;

错误报告-ORA-06550:第15行,第23列:PLS-00201:标识符“QRY”。ID“必须声明为ORA-06550:第15行,第23列:PLS-00201:标识符”QRY。ID’必须声明为ORA-06550:第15行,第12列:PL/SQL:ORA-00904::无效标识符ORA-06550:第15行,第5列:PL/SQL:SQL语句忽略06550。00000-“第%s行第%s列:\n%s”*原因:通常是PL/SQL编译错误*行动:

共有2个答案

姬锐
2023-03-14

请尝试使用光标。

SET SERVEROUTPUT ON;
DECLARE
 TYPE trxtypeinforec IS RECORD(
    NAME ra_cust_trx_types.NAME%TYPE
    );

  TYPE trxtypeinfotab IS TABLE OF trxtypeinforec
   INDEX BY PLS_INTEGER;

   g_inv_type        trxtypeinfotab;
   l_result VARCHAR2 (100);

   -- Query for retrieving index goes in the cursor or use existing cursor
   CURSOR cur_id  IS 
   SELECT 1 AS ID FROM DUAL;

BEGIN
    -- Populate records here or put inside loop as required
    g_inv_type(1).NAME := 'Test';

    -- Loop through the cursor to get the relevant index    
    FOR rec in cur_id
    LOOP
        SELECT g_inv_type(rec.ID).NAME
        INTO l_result
        FROM DUAL;
        dbms_output.put_line (l_result);
    END LOOP;

END;
/

如果我们能够获得关于现有游标如何获取索引值的更多信息,这将非常有用。

输出:

测验

PL/SQL程序成功完成。

阮选
2023-03-14

首先将SELECT中的索引检索到局部变量中,然后将关联数组中的值分配给PL/SQL范围内而不是SQL范围内的l_result

DECLARE
  TYPE trxtypeinforec IS RECORD(
    NAME ra_cust_trx_types.NAME%TYPE
  );

  TYPE trxtypeinfotab IS TABLE OF trxtypeinforec INDEX BY PLS_INTEGER;

   g_inv_type  trxtypeinfotab;
   idx         PLS_INTEGER;
   l_result    ra_cust_trx_types.NAME%TYPE;

BEGIN
  g_inv_type(1).NAME := 'Test';

  SELECT 1
  INTO   idx
  FROM   DUAL;

  l_result := g_inv_type(idx).NAME;

  DBMS_OUTPUT.PUT_LINE( l_result );
END;
/

输出:

Test

数据库

 类似资料:
  • 问题内容: 我有这个: 当我做一个我得到: 在probleme我有是附加在 有人可以帮忙吗,谢谢 问题答案: 尝试以下代码(已修复):

  • 问题内容: 我正在尝试使用Jackson将一些JSON数据转换为Java对象(精确地说是对象列表),但出现此错误: org.codehaus.jackson.map.JsonMappingException:无法反序列化objectlayerlayer的实例。START_ARRAY令牌之外的详细信息 这是代码: ld 是Json格式的列表,这是让我在jackson教程中感到困惑的部分。这是什么 新

  • 我试图访问数据库FK使用命名SQL查询与Hibernate,这个想法是查询一个客户表,其中包含名称,和公司ID等。CompanyId是对应表的FK。我写的查询如下: 我目前面临的问题如下: 线程“main”组织中出现异常。冬眠QueryParameterException:位置超出已声明序数参数的数量。请记住,序数参数是基于1的!职位:2个在组织。冬眠发动机查询spi。参数元数据。位于org的ge

  • 问题内容: 嗨,我无法执行以下功能而没有遇到以下异常。我不确定为什么会这样。我认为这可能与报价有关。如果有问题,我正在使用derby数据库。 这是我尝试执行的以下代码: 这是例外: 问题答案: 您的代码中有两个问题: SQL语句最后不需要分号。它将使代码失败。 该代码易于进行SQL注入并且难以维护。请改用: 这应该是工作代码: 在 大 平原字符串连接而这种做法对于你的情况之间的区别就是参数会逃跑任

  • 由于我刚刚开始尝试Apache Ignite,我肯定做了一些明显错误的事情。如果你能让我知道怎么解决这个问题就太好了。 另外,我是在客户机模式下运行这段代码,而不是作为服务器。一个3节点群集单独运行。

  • 因此,我正在制作一个简单的应用程序,其中我的代码连接到一个SQL Server Express数据库。我已经配置了所有的东西,JDBC、数据库、登录和密码。但是当我尝试运行代码时,我总是得到相同的错误。错误在于: 我目前正在使用VSCode进行开发,但是我已经改用了IntelliJ和Eclipse,我仍然得到同样的错误。 我的代码: 已导入JDBC jar