我创建了一个程序并执行它。它也被执行了。但不显示结果。我错过了一些基本步骤,这就是为什么会发生这种情况。请帮忙。
set serverout on;
Create or replace procedure pro1 (a number) is
x varchar2(30);
begin
select last_name into x from employees where employee_id= a;
end;
/
declare
y varchar2(30);
begin
pro1 (102);
dbms_output.put_line (y);
end;
/
答案 0 :(得分:1)
执行以下操作以查看输出
CREATE OR REPLACE PROCEDURE pro1 (i_param IN VARCHAR2, o_param OUT VARCHAR2)
IS
BEGIN
SELECT LAST_NAME
INTO o_param
FROM employees
WHERE employee_id= i_param;
END;
并执行程序
SET SERVEROUTPUT ON;
DECLARE
z VARCHAR2 (30);
BEGIN
pro1 ('535', z);
DBMS_OUTPUT.put_line (z);
END;
/
如果您的程序没有任何DML语句,最好使用函数。
答案 1 :(得分:0)
据我所知,您希望显示ID为102的员工的last_name。为了能够从pro1获取姓氏,您应该创建函数而不是过程,因为过程不能返回任何值。试试这个:
set serveroutput on;
Create or replace function pro1 (a number) return varchar2
is
x varchar2(30);
begin
select last_name into x from employees where employee_id= a;
return x;
exception when no_data_found then
return 'no employee with this id';
end;
/
declare
y varchar2(30);
begin
y:=pro1 (535);
dbms_output.put_line (y);
end;
/
答案 2 :(得分:0)
即使没有“OUT参数”程序也可以返回结果。 在下面的示例中找到:
set serverout on;
Create or replace procedure pro1 (a number) is
x varchar2(30);
begin
select last_name into x from employees where employee_id= a;
dbms_output.put_line (x);
end;
/
declare
y varchar2(30);
begin
pro1 (102);
end;
/