如何使用其他 pl/sql 块在 Oracle db 中输出信息?

Posted

技术标签:

【中文标题】如何使用其他 pl/sql 块在 Oracle db 中输出信息?【英文标题】:How to output information in Oracle db using in other pl/sql block? 【发布时间】:2021-01-21 16:32:49 【问题描述】:

我有以下代码:


SET SERVEROUTPUT ON
ACCEPT empno PROMPT 'Enter empno: '
ACCEPT ename PROMPT 'Enter ename: '
ACCEPT job PROMPT 'Enter job: '
ACCEPT mgr PROMPT 'Enter mgr: '
ACCEPT sal PROMPT 'Tneter sal: '
ACCEPT deptno PROMPT 'Enter deptno: '
DECLARE
v_empno NUMBER := '&empno';
v_ename VARCHAR(255) := '&ename';
v_job VARCHAR(255) := '&job';
v_mgr NUMBER := '&mgr';
v_hire DATE := Sysdate;
v_sal NUMBER := '&sal';
v_comm NUMBER := null;
v_deptno NUMBER := '&deptno';
BEGIN
    INSERT INTO EMP(EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (v_empno, v_ename, v_job, v_mgr, v_hire, v_sal, v_comm, v_deptno);
    EXCEPTION
    WHEN value_error THEN
    DBMS_OUTPUT.Put_line('Error inserting data');
END;
/
ACCEPT vote PROMPT 'Commit changes?'
DECLARE
vote VARCHAR(10) := '&vote';
BEGIN
    IF vote = 'yes' THEN
    COMMIT COMMENT 'CHANGES COMMITED' WRITE IMMEDIATE NOWAIT;
    DBMS_OUTPUT.Put_line('New employee with empno ' || v_empno || ', name:' || v_ename|| ', job:' || v_job || ', his manager is ' || v_mgr + ' and salary is ' || v_sal);
    ELSE
    ROLLBACK;
    END IF;
END;

此代码将数据插入到表中。这是工作。 但它不输出结果来自

DBMS_OUTPUT.Put_line('New employee with empno ' || v_empno || ', name:' || v_ename|| ', job:' || v_job || ', his manager is ' || v_mgr + ' and salary is ' || v_sal);

我收到了必须声明 v_empno 的错误。 我该怎么办?

【问题讨论】:

【参考方案1】:

变量仅限于其声明的范围。您在一个匿名 PL/SQL 块中定义了v_empno:您不能在第二个块中引用它。

你可以做的是引用替换变量:

DBMS_OUTPUT.Put_line('New employee with empno &&empno , name: &&ename, job:&&job , his manager is &&mgr and salary is &&sal');

注意双与号。此符号表示该变量是从该命名变量的先前实例填充的。它避免了每次都提示用户的需要。

但根本问题是 PL/SQL 并不是真正为用户交互而设计的。您正在尝试使用旨在进行自主数据处理的语言来构建 UI。

【讨论】:

以上是关于如何使用其他 pl/sql 块在 Oracle db 中输出信息?的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL概述

如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?

PL/SQL Developer如何连接64位的Oracle图解

oracle SQL语句中怎么样调用存储过程

免安装Oracle客户端使用PL/SQL

Oracle --- PL/SQL