-2

私の答えが正しいかどうか知りたいのですが、助けてください。事前に感謝します

a) 「Empoyees」テーブルから「Employee_ID」を受け取り、従業員の姓名を大文字で返す関数「Display_Employee_Name_In_Uppercase」を作成します。

CREATE OR REPLACE FUNCTION DISPLAY_EMPLOYEE_NAME
(EMP_ID IN NUMBER) RETURN VARCHAR2
IS
EMPNAME VARCHAR(25);
BEGIN
SELECT FNAME ||' '|| LNAME INTO EMP_NAME FROM EMPLOYEES
WHERE EMPLOYEE_ID = EMP_ID;
RETURN UPPER(EMPNAME);
EXCEPTION 
WHEN OTHERS THEN NULL;
END DISPLAY_EMPLOYEE_NAME;

b) Employee_ID が 107、200、205 の従業員の名前を表示する小さな PL/SQL プログラムを作成します。

SET SERVEROUTPUT ON;
DECLARE 
EMP_ID VARCHAR2(25);
entEMPNAME VARCHAR2(25);
BEGIN 
EMP_ID :=107,200,205;
EMPNAME :=DISPLAY_EMPLOYEE_NAME(EMP_ID);
DBMS_OUTPUT.PUT_LINE('EMPLOYEE NAME: '||EMPNAME);
END;

最初の答えが正しくないので、このコードを実行しましたが、うまくいきましたが、長すぎます。短くできますか?

申し訳ありませんが、新しいページに投稿しませんでした。回答を投稿する方法がわかりません。

SET SERVEROUTPUT ON;
DECLARE 
    EMP_ID VARCHAR2(25);
    EMP_ID2 VARCHAR2(25);
    EMP_ID3 VARCHAR2(25);
    EMPNAME VARCHAR2(25);
    EMPNAME2 VARCHAR2(25);
    EMPNAME3 VARCHAR2(25);
BEGIN 
    EMP_ID :='107';
    EMP_ID2 :='200';
    EMP_ID3 :='205';
    EMPNAME :=DISPLAY_EMPLOYEE_NAME(EMP_ID);
    EMPNAME2 :=DISPLAY_EMPLOYEE_NAME(EMP_ID2);
    EMPNAME3 :=DISPLAY_EMPLOYEE_NAME(EMP_ID3);
    DBMS_OUTPUT.PUT_LINE('EMPLOYEE NAME: '|| EMPNAME || ' ' || EMPNAME2 ||' ' || EMPNAME3);
END; 
4

2 に答える 2

1
EXCEPTION 
WHEN OTHERS THEN NULL;

これはほとんどの場合間違っています(そして確かにこの場合はそうです)。あなたはあなたの関数が完全に失敗する可能性があり、あなたは気にしないと述べています。最良のオプションは、エラーをどこかにログに記録してから、再度発生させることです。エラーをログに記録する必要がない場合は、エラー処理セクションを完全に省略して、エラーを呼び出し元のレイヤーに浸透させる必要があります。

さらに、コードブロック「b」は機能しません。数値を期待している関数にコンマ区切りの文字列を渡して、それが魔法のように機能することを期待することはできません(技術的には可能ですが、がっかりするでしょう)。これを行う最も簡単な方法は、各値で1回ずつ、プロシージャを3回呼び出すことです。さらに一歩進んだ場合は、数値のコレクションであるユーザー定義型を作成し、それらの値をループして、毎回関数を呼び出すことができます。

于 2012-05-09T18:52:27.023 に答える
0

あなたの要件が言うので

...「従業員」から「従業員ID」を受け入れる

入力パラメータを固定したい:

CREATE OR REPLACE FUNCTION DISPLAY_EMPLOYEE_NAME 
(EMP_ID IN Empoyees.Employee_ID%type)  
....
于 2012-05-09T18:30:00.083 に答える