游标问题和语法 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,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器