2017-03-22 5 views
1
DECLARE 
    TEAM_ID NUMBER := &INPUT; 
    CURSOR C_WORKER IS 
    SELECT FIRST_NAME, LAST_NAME 
    FROM EMPLOYEES 
    WHERE DEPARTMENT_ID = TEAM_ID; 
    V_LAST_NAME EMPLOYEES.LAST_NAME%TYPE; 
    V_FIRST_NAME EMPLOYEES.FIRST_NAME%TYPE; 
BEGIN 
    OPEN C_WORKER; 
    LOOP 
     FETCH C_WORKER INTO V_LAST_NAME, V_FIRST_NAME; 
     EXIT WHEN C_WORKER%NOTFOUND; 
     DBMS_OUTPUT.PUT_LINE(V_LAST_NAME || ' ' || V_FIRST_NAME); 
    END LOOP; 
    CLOSE C_WORKER; 
END; 

このコードを変更してTEAM_ID(&入力)を数値にする方法はありますか? カーソルが開いている場合は、カーソルが開いていない場合は、「数字を書いてください」と印刷します。PLSQL - チェック&入力方法は数字です

最小値は1で、最大値はTEAM_IDの最大数ですか?それとも単なる数字ですか?

+1

どのような種類を受け入れ、どのフォーマットになりますか?たとえば、1000の区切り記号が有効な数字ですか?負の? ...あなたがいくつかの助けを得るために必要な小切手をより良く定義しようとしてください。 – Aleksej

+1

@Aleksej私は編集の投稿をします。良い? – Starvill

+0

'' 1,000 ''が数値として数えるべきかどうかはまだ分かりません。 –

答えて

1

置換変数を処理するには、変数を引用符で囲んで文字列として扱う必要があります。

例えば、これはあなたが必要なもののような何かをする方法かもしれない:あなたは数字の

declare 
    -- define a varchar2 variable to host your variable; notice the quotes 
    vStringInput  varchar2(10) := '&input'; 
    vNumInput   number; 
    vVal    number; 
    -- define a parametric cursor, to avoid references to variables 
    cursor cur(num number) is select num from dual; 
begin 
    -- try to convert the string to a number 
    begin 
     vNumInput := to_number(vStringInput); 
    exception 
     when others then 
      vNumInput := null; 
    end; 
    -- 
    -- check the values, to understand if it is a number (vNumInput NULL or NOT NULL) 
    -- and, in case it's a number, if it suits your criteria 
    case 
     when vNumInput is null then 
      dbms_output.put_line('not a number'); 
     when vNumInput < 1 then 
      dbms_output.put_line('less than 1'); 
     -- whatever check you need on the numeric value 
     else 
      -- if the value is ok, open the cursor 
      open cur(vNumInput); 
      loop 
       fetch cur into vVal;     
       exit when cur%NOTFOUND; 
       dbms_output.put_line('value from cursor: ' || vVal); 
      end loop;    
    end case;  
end; 
/
+0

とてもうまくいきます! – Starvill

関連する問題