首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用VARCHAR2的循环

使用VARCHAR2的循环
EN

Stack Overflow用户
提问于 2016-11-29 16:22:42
回答 1查看 483关注 0票数 1

我试图用下面的代码来显示每个学生的信息

代码语言:javascript
复制
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;
/

我的输出应该类似于

代码语言:javascript
复制
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循环

代码语言:javascript
复制
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吗?它只适用于数字吗?

EN

回答 1

Stack Overflow用户

发布于 2016-11-29 16:45:16

您的代码有几个问题。

首先,为什么要使用PL/SQL来做到这一点?您应该直接使用SQL语句。我将假设这是一个家庭作业问题(*叹息*-当然还有更好的例子可供使用?!)

  1. IF v_Record.STUDENTNAME = &SEARCH_STUDENT -当传入search_student的值时,客户端将替换术语&search_student。因此,在定义search_student时,必须确保指定学生名称的单引号是字符串(即。当提示输入search_student时,输入"'SomeName'")或将单引号放在&SEARCH_STUDENT - ie周围。IF v_Record.STUDENTNAME = '&SEARCH_STUDENT'
  2. 在引用for循环中的游标返回的字段时,需要引用将值提取到的记录。因此,DBMS_OUTPUT.PUT_LINE('Student Name: ' || STUDENTNAME);应该是DBMS_OUTPUT.PUT_LINE('Student Name: ' || v_Record.STUDENTNAME);
  3. 最后,如果您希望一次输出一个学生记录,请将过滤器放在光标中,而不是循环中。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40870767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档