程序已执行,但未显示结果

时间:2014-05-20 02:59:36

标签: oracle plsql

我创建了一个程序并执行它。它也被执行了。但不显示结果。我错过了一些基本步骤,这就是为什么会发生这种情况。请帮忙。

 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;
    /

3 个答案:

答案 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;
/