2017-03-22 82 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,max是最大数量TEAM_ID?或者它只是一个数字?

+1

你会接受什么样的数字,并以哪种方式?例如,具有千位分隔符的数字是否有效?和负面? ...请尝试更好地定义您需要获得一些帮助的检查 – 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

相关问题