0

私は PL/SQL の初心者で、このコードの出力に問題があります。従業員名、仕事、給与、IDなどを含む従業員テーブルがあります。必要なのは、出力を次のように表示することです。

Employee Name:       Johnson
Job:                 Service Writer
Total Pay:           $32,000

正確なフェッチが要求された行よりも多くを返すというエラーが発生し続けます

ACCEPT p_1 PROMPT 'Please enter the Employee ID:'

DECLARE
   v_eid     employee.employee_id%TYPE := &p_1;
   v_name    employee.employee_name%TYPE;
   v_job     employee.job%TYPE;
   v_pay     employee.salary%TYPE;
BEGIN
   SELECT employee_name, job, salary
   INTO v_name, v_job, v_pay
   FROM employee;
   DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
   DBMS_OUTPUT.PUT_LINE('Job: ' || v_job);
   DBMS_OUTPUT.PUT_LINE('Total Pay: ' || v_pay);
END;

私は近いと思いますか?どんな助けでも素晴らしいでしょう!

4

1 に答える 1

1

ステートメントSELECTは複数の行を返します。これは、SELECT INTO「正確なフェッチが要求された行数を超えて返される」というエラーでステートメントが失敗することを意味します。

SELECT ステートメントが 1 つの行のみを返すことを意味する WHERE 句を追加してみてください。私はあなたのコードから推測していますが、あなたは次のようなことをしたいと思っています:

ACCEPT p_1 PROMPT 'Please enter the Employee ID:'

DECLARE
   v_eid     employee.employee_id%TYPE := &p_1;
   v_name    employee.employee_name%TYPE;
   v_job     employee.job%TYPE;
   v_pay     employee.salary%TYPE;
BEGIN
   SELECT employee_name, job, salary
   INTO v_name, v_job, v_pay
   FROM employee
   WHERE employee_id = v_eid;

   DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_name);
   DBMS_OUTPUT.PUT_LINE('Job: ' || v_job);
   DBMS_OUTPUT.PUT_LINE('Total Pay: ' || v_pay);
END;

エラーに関する詳細については、http://www.techonthenet.com/oracle/errors/ora01422.phpを確認してください。

于 2013-04-17T19:16:04.900 に答える