我试图用下面的代码来显示每个学生的信息
DECLARE
CURSOR cursor1 IS SELECT STUDENTNAME, COURSEID, COURSEDESCRIPTION, COURSECREDITS, GRADE
FROM STUDENTINFO;
S_NAME STUDENTINFO.STUDENTNAME%TYPE;
S_COURSEID STUDENTINFO.COURSEID%TYPE;
S_COURSEDESCRIPTION STUDENTINFO.COURSEDESCRIPTION%TYPE;
S_COURSECREDITS STUDENTINFO.COURSECREDITS%TYPE;
S_GRADE STUDENTINFO.GRADE%TYPE;
BEGIN
OPEN CURSOR1;
LOOP
FETCH CURSOR1 INTO S_NAME, S_COURSEID, S_COURSEDESCRIPTION, S_COURSECREDITS, S_GRADE;
EXIT WHEN cursor1%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('Student Name: ' || S_NAME);
DBMS_OUTPUT.PUT_LINE(S_COURSEID || S_COURSEDESCRIPTION || S_COURSECREDITS || S_GRADE);
DBMS_OUTPUT.PUT_LINE(CHR(10));
END LOOP;
CLOSE CURSOR1;
END;
/我的输出应该类似于
Student Name: John
CMIS 101 Intro to Info. Systems 3 B
CMIS 301 System Analysis 3 C
CMIS 451 Client/Server Systems 3 C我很确定我应该使用我创建的for循环
DECLARE
CURSOR cursor2 IS SELECT STUDENTNAME, COURSEID, COURSEDESCRIPTION, COURSECREDITS, GRADE
FROM STUDENTINFO;
search_student STUDENTINFO.STUDENTNAME%TYPE;
BEGIN
FOR v_Record IN cursor2
LOOP
IF v_Record.STUDENTNAME = &SEARCH_STUDENT THEN
DBMS_OUTPUT.PUT_LINE('Student Name: ' || STUDENTNAME);
DBMS_OUTPUT.PUT_LINE(COURSEID || COURSEDESCRIPTION || COURSECREDITS || GRADE);
DBMS_OUTPUT.PUT_LINE(CHR(10));
END IF;
END LOOP;
END;
/但是,当我为search_student输入一个名称时,只会给出错误
标识符“插入此处”
在搜索时,我可以不使用VARCHAR2吗?它只适用于数字吗?
发布于 2016-11-29 16:45:16
您的代码有几个问题。
首先,为什么要使用PL/SQL来做到这一点?您应该直接使用SQL语句。我将假设这是一个家庭作业问题(*叹息*-当然还有更好的例子可供使用?!)
IF v_Record.STUDENTNAME = &SEARCH_STUDENT -当传入search_student的值时,客户端将替换术语&search_student。因此,在定义search_student时,必须确保指定学生名称的单引号是字符串(即。当提示输入search_student时,输入"'SomeName'")或将单引号放在&SEARCH_STUDENT - ie周围。IF v_Record.STUDENTNAME = '&SEARCH_STUDENT'DBMS_OUTPUT.PUT_LINE('Student Name: ' || STUDENTNAME);应该是DBMS_OUTPUT.PUT_LINE('Student Name: ' || v_Record.STUDENTNAME);https://stackoverflow.com/questions/40870767
复制相似问题