Display department names using Cursors.Create a PL/SQL 块使用游标显示部门 table 中的所有部门名称

Display department names using Cursors.Create a PL/SQL block to display all the department names from the Department table using cursors

TABLE:

Column name Data type Constraints

DEPARTMENT_ID NUMBER(5) PK
DEPARTMENT_NAME VARCHAR2(25) NOT NULL
LOCATION_ID VARCHAR2(15)

这个我试过了。但我仍然没有得到我的输出。谁能帮我得到输出。

set serveroutput on;
DECLARE
DEPARTMENT_NAME VARCHAR2(25);
CURSOR dep_cursor IS
SELECT
DEPARTMENT_NAME
FROM
department;
BEGIN
OPEN dep_cursor;
FETCH dep_cursor INTO DEPARTMENT_NAME;
DBMS_OUTPUT.PUT_LINE(‘Department Names are :’ || DEPARTMENT_NAME);
CLOSE dep_cursor;
END;
/

错误信息:未声明绑定变量“~”。

示例输出:

Department Names are :
ADMIN
DEVELOPMENT
TESTING

这是关于你在这里使用的那些“花哨的”单引号:

DBMS_OUTPUT.PUT_LINE(‘Department Names are :’ || DEPARTMENT_NAME);

应该是

DBMS_OUTPUT.PUT_LINE('Department Names are :' || DEPARTMENT_NAME);

关于您所犯的其他“错误”:没有 循环 ,光标 returns 只有一行,然后您会显示它。我建议您切换到循环游标,因为它更易于维护:

begin
  for cur_r in (select department_name from department) loop
    dbms_output.put_line(cur_r.department_name);
  end loop;
end;
/

这就是您需要的一切;没有声明部分,没有打开或关闭游标,不用担心退出循环...Oracle 为您完成。

SET SERVEROUTPUT ON;
declare
v_dept department.department_name%type; 
cursor c_dept is SELECT department_name FROM department;
BEGIN
  dbms_output.put_line('Department Names are :');
    OPEN c_dept;
    LOOP
        FETCH c_dept INTO v_dept;
        EXIT WHEN c_dept%notfound;
        dbms_output.put_line(v_dept);
    END LOOP;
    CLOSE c_dept;
END;
/

设置服务器输出; 宣布 v_dept department.department_name%类型; 游标 c_dept 是 SELECT department_name FROM department ORDER BY DEPARTMENT_NAME; 开始 dbms_output.put_line('Department Names are :'); 打开c_dept; 环形 获取 c_dept 进入 v_dept; 当 c_dept%notfound 时退出; dbms_output.put_line(v_dept); 结束循环; 关闭 c_dept; 结尾; /

SET SERVEROUTPUT ON;
declare v_dept department.department_name%type;
cursor c_dept is SELECT department_name FROM department order by department_name asc;
BEGIN dbms_output.put_line('Department Names are :');
OPEN c_dept;
LOOP
FETCH c_dept INTO v_dept;
EXIT WHEN c_dept%notfound;
dbms_output.put_line(v_dept);
END LOOP;
CLOSE c_dept; END;

这将 100% 有效,因为问题也要求以 升序 显示。 如果觉得有用请up-vote

SET SERVEROUTPUT ON;
DECLARE
v_dept department.department_name%type;
cursor c_dept is SELECT department_name FROM department order by department_name asc;
BEGIN 
    dbms_output.put_line('Department Names are :');
        OPEN c_dept;
        LOOP
            FETCH c_dept INTO v_dept;
            EXIT WHEN c_dept%notfound;
            dbms_output.put_line(v_dept);
        END LOOP;
        CLOSE c_dept; 
END;