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

How to output information in Oracle db using in other pl/sql block?

我有以下代码:


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;

此代码将数据插入 table。这是工作。 但它不输出来自

的结果
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 的错误。 我该怎么办?

变量仅限于其声明的范围。您在一个匿名 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。