如何使用其他 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 中输出信息?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用参数从 Oracle PL/SQL 执行 Java jar 文件?