Plsql 给我指出正确的方向

Plsql 给我指出正确的方向,plsql,Plsql,好的,所以我需要根据一个受训者增加培训师。我认为大部分都是正确的,但我在“DBMS_OUTPUT.PUT_line”(“++++”| | sr.sid| |”不是水手“”下面的一行中得到了一个错误。我不确定这里应该是什么,因为这是我第一次编写PL/SQL。尝试一下: -- File: PLh10.sql -- Author: John Tunisi -- ---------------------------------- SET SERVEROUTPUT ON SET VERIFY O

好的,所以我需要根据一个受训者增加培训师。我认为大部分都是正确的,但我在“DBMS_OUTPUT.PUT_line”(“++++”| | sr.sid| |”不是水手“”下面的一行中得到了一个错误。我不确定这里应该是什么,因为这是我第一次编写PL/SQL。

尝试一下:

-- File: PLh10.sql 
-- Author: John Tunisi 
-- ---------------------------------- 
SET SERVEROUTPUT ON 
SET VERIFY OFF 
-- ---------------------------------- 
ACCEPT traineeID NUMBER PROMPT 'Enter a trainee ID: ' 
ACCEPT increment NUMBER PROMPT 'Enter an increment for his trainers: ' 
DECLARE 
 sr sailors%ROWTYPE; 

 CURSOR tCursor IS 
    SELECT  S.sid, S.sname, S.rating, S.age, S.trainee
    FROM    sailors S, sailors R
    WHERE   R.sid = '&traineeID' AND
        S.trainee = R.sid;
BEGIN 
 OPEN tCursor; 
 LOOP 
 -- Fetch the qualifying rows one by one 
 FETCH tCursor INTO sr;

 -- Print the sailor' old record 
 DBMS_OTPUT.PUT_LINE ('+++++ old row: '||sr.sid||' '
    ||sr.sname||sr.rating||' '||sr.age||' '||sr.trainee);

 -- Increment the trainers' rating 
 sr.rating := sr.rating + &increment;
 UPDATE sailors
 SET rating = sr.rating
 WHERE sailors.sid = sr.sid;

 -- Print the sailor' new record 
 DBMS_OUTPUT.PUT_LINE ('+++++ new row: '||sr.sid||' '
    ||sr.sname||sr.rating||' '||sr.age||' '||sr.trainee);
 END LOOP; 
 IF tCursor%ROWCOUNT = 0 /*test whether the trainee has no trainers*/
 DBMS_OUTPUT.PUT_LINE ('+++++ '||sr.sid||' is either not a sailor,'
    ||' or has no trainer');
 ELSE 
 DBMS_OUTPUT.PUT_LINE ('+++++ DB has been updated'); 
 END IF; 
 CLOSE tCursor; 
EXCEPTION 
WHEN OTHERS THEN 
 DBMS_OUTPUT.PUT_LINE('+++++'||SQLCODE||'...'||SQLERRM); 
END; 
/ 
-- Let's see what happened to the database 
SELECT * 
FROM sailors S 
WHERE S.trainee = '&traineeID'; 
UNDEFINE traineeID 
UNDEFINE increment 
我在修改或添加的行中添加了评论(添加或更改)。很难说这是否有效,因为我无法访问您的数据,但这可能是朝着正确方向迈出的一步

分享和享受

SET SERVEROUTPUT ON 
SET VERIFY OFF 
-- ---------------------------------- 
ACCEPT traineeID NUMBER PROMPT 'Enter a trainee ID: ' 
ACCEPT increment NUMBER PROMPT 'Enter an increment for his trainers: ' 
DECLARE 
  sr               sailors%ROWTYPE;
  srNew            sailors%ROWTYPE;
  nRecords_updated NUMBER := 0;

  CURSOR tCursor IS 
    SELECT  S.sid, S.sname, S.rating, S.age, S.trainee
    FROM    sailors S, sailors R
    WHERE   R.sid = '&traineeID' AND
        S.trainee = R.sid;
BEGIN 
  OPEN tCursor;

  LOOP 
    -- Fetch the qualifying rows one by one 
    FETCH tCursor INTO sr;
    EXIT WHEN tCursor%NOTFOUND;  -- ADDED

    -- Print the sailor' old record 

    DBMS_OUTPUT.PUT_LINE ('+++++ old row: ' || sr.sid || ' ' ||
                          sr.sname || sr.rating || ' ' || sr.age ||
                          ' ' || sr.trainee);

    -- Increment the trainers' rating 

    sr.rating := sr.rating + &increment;

    UPDATE sailors
      SET rating = sr.rating
      WHERE sailors.sid = sr.sid;

    nRecords_updated := nRecords_updated + SQL%ROWCOUNT;  -- ADDED

    -- Obtain the updated record  -- ADDED

    SELECT s.*                  -- ADDED
      INTO srNew                -- ADDED
      FROM SAILORS s            -- ADDED
      WHERE s.SID = sr.SID;     -- ADDED         

    -- Print the sailor' new record

    DBMS_OUTPUT.PUT_LINE ('+++++ new row: ' || srNew.sid || ' ' ||  -- CHANGED
                          srNew.sname || srNew.rating || ' ' ||     -- CHANGED
                          srNew.age || ' ' || srNew.trainee);       -- CHANGED
  END LOOP;

  IF nRecords_updated = 0 /*test whether the trainee has no trainers*/  -- CHANGED
    DBMS_OUTPUT.PUT_LINE ('+++++ ' || sr.sid || ' is either not a sailor,' ||
                          ' or has no trainer');
  ELSE 
    DBMS_OUTPUT.PUT_LINE ('+++++ DB has been updated'); 
  END IF; 

  CLOSE tCursor; 
EXCEPTION 
  WHEN OTHERS THEN 
    DBMS_OUTPUT.PUT_LINE('+++++'||SQLCODE||'...'||SQLERRM); 
END; 
/