0

すべての従業員の部署名を返す関数を記述します。20部の社員全員の名前と部署名を印刷したブロックを書きます。関数ヘッダー:
Create or replace function empdnm (empno number) return varchar2 is

そのような empno がない場合は、例外を記述してみてください。

次のコードを試してみましたが、いくつかのエラーが表示されます SQL statment ignored and missing expression。何が問題ですか?

create or replace function empdnm (empno1 number) return varchar2 is 
deptname varchar (30);
BEGIN   
Select into deptname(select d.dname from dept d
join emp  e on  e.deptno=d.deptno
Where e.empno= empno1
)
exception
WHEN no_data_found THEN
dbms_output.put_line('no employee with no:'|| empno1);

return(deptname);
end;

BEGIN
FOR r IN (SELECT * FROM emp where dept_id = 20) loop
dbms_output.put_line( 'employee '|| r.emp_name  || ' is in department '||  empdnm(empno1) );
END loop;
end;
4

2 に答える 2

2

このようにしてみてください:

create or replace function empdnm (empno1 number) return varchar2 is 
   deptname varchar (30);
BEGIN   
   SELECT d.dname
   INTO   deptname
   FROM   dept d
   JOIN   emp e on e.deptno = d.deptno
   WHERE  e.empno = empno1;

   return(deptname);
exception
   WHEN no_data_found THEN
      dbms_output.put_line('no employee with no:'|| empno1);
end;
于 2013-02-05T16:06:47.243 に答える
0

以下を使用します。

create or replace function empdnm (empno1 number) return varchar2 is 
   deptname varchar (30);
BEGIN   
   SELECT d.dname
   INTO   deptname
   FROM   dept d
   JOIN   emp e on e.deptno = d.deptno
   WHERE  e.empno = empno1;

   return(deptname);
exception
   WHEN no_data_found THEN
      dbms_output.put_line('no employee with no:'|| empno1);
end;

BEGIN
FOR r IN (SELECT * FROM emp where dept_id = 20) loop
dbms_output.put_line( 'employee '|| r.emp_name  || ' is in department '||  empdnm(r.empno1) );
END loop;
end;
于 2013-02-05T16:47:15.340 に答える