【发布时间】:2018-11-11 05:12:44
【问题描述】:
我的程序会接受一个学科代码作为参数,然后继续显示2016年以前教过该学科的学科名称和讲师姓名。我的程序还应该提示输入一个学科代码并显示结果。我在没有将其放入过程的情况下尝试了以下代码,它返回了正确的结果,但是当我将我的代码作为 PL/SQL 过程的一部分包含时,我收到一个错误提示
警告:过程创建时出现编译错误。
我对 PL/SQL 很陌生,所以任何建议都会有所帮助!我尝试了几个小时的程序代码如下:
CREATE OR REPLACE PROCEDURE WHO(CODE CHAR)
IS
FNAME VARCHAR(256)
LNAME VARCHAR(256)
TITLE VARCHAR(256)
CURSOR C1
IS
SELECT FIRST_NAME, LAST_NAME, SUBJECT.NAME
FROM ACADEMIC INNER JOIN TEACHES
ON STAFF# = LECTURER
INNER JOIN SUBJECT
ON TEACHES.CODE=SUBJECT.CODE
WHERE YEAR<2016 AND TEACHES.CODE=CODE
GROUP BY FIRST_NAME, LAST_NAME, SUBJECT.NAME;
BEGIN
OPEN C1;
LOOP
IF C1%NOTFOUND THEN EXIT;
END IF;
FNAME=FIRST_NAME;
LNAME=LAST_NAME;
DBMS.OUTPUT.PUT_LINE(FNAME||' '||LNAME);
TITLE=SUBJECT.NAME;
DBMS.OUTPUT.PUT_LINE(TITLE);
END LOOP;
CLOSE C1;
END WHO;
/
【问题讨论】:
-
我将不得不显示主题名称,不幸的是它被放置在另一个名为主题的表中。还有其他方法吗?
-
你能把 DBMS_OUTPUT.PUT_LINT 改成 DBMS_OUTPUT.PUT_LINE
-
抱歉打错了。我试过但仍然是同样的错误:(
-
你用什么工具来开发PL/SQL?您需要了解如何使用它来查看编译错误,即使它只是查询
user_errors。 SQL Developer 等将以交互方式突出显示它们。 SQL*Plus 有show errors命令等 -
不是您的编译错误,而是
teaches.code = code应该是teaches.code = who.code(或者使用行业标准的参数命名约定,例如p_code)。
标签: sql database oracle plsql procedure