0

当我执行程序时,nth 会出现,除了以下消息并且不显示任何不应该出现的输出:匿名块已完成

我试过了,set serveroutput on size 50000但没有任何改变。

这是我的 PL/SQL 过程,不确定我是否做得对。

CREATE OR REPLACE PROCEDURE verify AS
  empnum  NUMBER;
  empname VARCHAR2(50);
  fail EXCEPTION;
BEGIN

  SELECT employee.e#, employee.name INTO empnum, empname
    FROM employee
    JOIN driver ON driver.e# = employee.e#
    JOIN mechanic ON mechanic.e# = driver.e#
   WHERE rownum = 1;

EXCEPTION
  WHEN no_data_found THEN
    dbms_output.put_line('ok');
    RAISE fail;
END verify;
/

我试图在使用 sql 语句中实现以下结果:

  SELECT employee.e#, employee.name
    FROM employee
    JOIN driver ON driver.e# = employee.e#
    JOIN mechanic ON mechanic.e# = driver.e#
   WHERE rownum = 1;

因此,如果有任何类似的记录,它将显示员工姓名和编号。如果没有找到类似的记录,它将显示一条ok消息。

4

3 回答 3

0

您能否指出您用于引发异常的 FAIL 变量。我们可以在不使用这个变量的情况下做到这一点。这是参考程序。请尝试让我们知道它是否有效。谢谢

CREATE or REPLACE PROCEDURE av_sp_test(salary_var_1 in number)
AS
name_var avrajit.name%type;
salary_var avrajit.salary%type;
fail exception;
BEGIN
SELECT name,salary into name_var,salary_var from avrajit
WHERE salary=salary_var_1;
dbms_output.put_line('name is'||' '||name_var||' '||'salary is'||' '||salary_var);
EXCEPTION WHEN no_data_found THEN
dbms_output.put_line('OK');
END av_sp_test;

--------------------------------------------------

I have taken an input variable just to show diffrenet criterias.

begin
av_sp_test(1000);
end;
---------------------------------------------------
name is Sushil salary is 1000

Statement processed.

0.01 seconds
---------------------------------------------------

begin
av_sp_test(2000);
end;
---------------------------------------------------
OK

Statement processed.

0.00 seconds
于 2013-12-12T06:51:12.543 回答
0

添加 dbms_out_put.put_line(empnum||empname); 在例外之前。试试看/

于 2013-11-12T06:57:14.747 回答
0

您只是将列值选择到变量中而不显示它们。DBMS_OUTPUT.put_line('Empnum: '|| empnum||' Empname: '||empname);在 Select 语句之后使用。

于 2013-11-12T11:07:43.203 回答