游标问题和语法 PLSQL

Posted

技术标签:

【中文标题】游标问题和语法 PLSQL【英文标题】:Issue with cursor and maybe syntax PLSQL 【发布时间】:2014-05-10 03:50:46 【问题描述】:

我正在尝试运行一个 plsql 块来检索客户 ID、数量、销售日期和产品。

它给出以下错误消息

结束; 错误报告 - ORA-06550:第 5 行,第 31 列: PL/SQL: ORA-00911: 无效字符 ORA-06550:第 3 行,第 8 列: PL/SQL:忽略 SQL 语句 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

这是我的代码,所有帮助将不胜感激。

SET SERVEROUTPUT ON
DECLARE
    CURSOR CUR_HISTORY IS 
         SELECT CUST#, SALE_DATE, QTY, DESCRIPTION
         FROM SALES S, PRODUCT P
       WHERE CUST# = &CUST#
       AND S.PRODUCT# = P.PRODUCT#;       

    TYPE TYPE_HISTORY IS RECORD (
       CID      SALES.CUST#%TYPE,
       SDT  SALES.SALE_DATE%TYPE,
       QTY  SALES.QTY%TYPE,
       PNAME    PRODUCT.DESCRIPTION%TYPE);  
    REC_HISTORY     TYPE_HISTORY;

BEGIN
    OPEN CUR_HISTORY;
         LOOP 
         FETCH CUR_HISTORY INTO REC_HISTORY;
         EXIT WHEN CUR_HISTORY%NOTFOUND;
   DBMS_OUTPUT.PUT_LINE('CUSTOMER ID: '   
          ||REC_HISTORY.CID|| ' ORDER DATE: ' || 
          REC_HISTORY.ODT|| '   QTY: ' 
          ||REC_HISTORY.QTY|| 'PRODUCT: ' 
          ||REC_HISTORY.PNAME);   
       END LOOP;
    CLOSE CUR_HISTORY;     
END;

【问题讨论】:

【参考方案1】:

在你的 put_line 你有

... 
ORDER DATE: ' || REC_HISTORY.ODT  
...

您的记录类型 TYPE_HISTORY 中没有 ODT 字段,而是有 SDT。因此,我认为您的记录类型声明中存在拼写错误。

【讨论】:

以上是关于游标问题和语法 PLSQL的主要内容,如果未能解决你的问题,请参考以下文章

Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器

PLSQL语法

PLSQL--游标

SQL记录-PLSQL基本语法与数据类型

Oracle中PLSQL的语法

Oracle 笔记