【问题标题】:Display department names using Cursors.Create a PL/SQL block to display all the department names from the Department table using cursors使用游标显示部门名称。创建一个 PL/SQL 块以使用游标显示部门表中的所有部门名称
【发布时间】:2020-12-18 04:42:41
【问题描述】:

表格:

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

【问题讨论】:

  • 这似乎是一个家庭作业,旨在开始教授一些基本的 PL/SQL。从实际的角度来看,根本不需要 PL/SQL,只需一个简单的“从部门中选择部门名称”就可以了。还有一些关于 PL/SQL 的建议——不要将你的局部变量(即:DEPARTMENT_NAME VARCHAR2(25);)命名为与表列名相同。制定一个命名标准,将局部变量和过程参数与列名区别开来。就个人而言,我对所有局部变量使用“v_”前缀,对所有参数使用“p_”前缀。

标签: sql oracle stored-procedures plsql


【解决方案1】:

设置服务器输出; 宣布 v_dept 部门.部门名称%type; 光标 c_dept 是 SELECT department_name FROM department ORDER BY DEPARTMENT_NAME; 开始 dbms_output.put_line('部门名称是:'); 打开 c_dept; 环形 FETCH c_dept 进入 v_dept; 当 c_dept%notfound 时退出; dbms_output.put_line(v_dept); 结束循环; 关闭 c_dept; 结尾; /

【讨论】:

  • 欢迎来到 Stack Overflow!纯代码答案并不是特别有用。请添加一些关于此代码如何解决问题的说明。
【解决方案2】:
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;
/

【讨论】:

  • 欢迎来到 Stack Overflow!虽然这段代码可以解决问题,including an explanation 解决问题的方式和原因确实有助于提高帖子的质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的回答添加解释并说明适用的限制和假设。
【解决方案3】:

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

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

应该是

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

与您犯的其他“错误”一样:没有循环,光标只返回一行,然后显示它。我建议您切换到光标 for 循环,因为它更易于维护:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多