如何编写pl sql异常语句要求用户以特定格式输入

How to write plsql exception satatement to ask user to give input in specific format

CREATE OR REPLACE PROCEDURE get_productdetails(

   p_reqid   OUT requirement.req_id%type,

   p_pid     OUT requirement.p_id%type,

   p_rstaffid OUT requirement.r_staff_id%type,
   
   p_demand  requirement.demand%type)

IS

CURSOR c_demand IS

SELECT req_id,p_id,r_staff_id from requirement where demand = upper(p_demand);

BEGIN

FOR i in c_demand Loop

DBMS_OUTPUT.PUT_LINE('Requirement ID :'||i.req_id);

DBMS_OUTPUT.PUT_LINE('Product ID'||i.p_id);

DBMS_OUTPUT.PUT_LINE('Staff ID :'||i.r_staff_id);

END LOOP;

END get_productdetails;

用户必须在'HIGH/LOW/AVG中输入需求,否则它会抛出异常要求以该格式输入数据 你能帮我写一个相应的例外吗

由于我无法访问您的 table 结构,因此以下代码未经测试。一个好的起点是官方 oracle documentation。在你的情况下,需要一个用户定义的异常,你需要在声明部分声明,然后 RAISE 最后在 EXCEPTION 块中捕获。

CREATE OR REPLACE PROCEDURE get_productdetails(
   p_reqid   OUT requirement.req_id%type,
   p_pid     OUT requirement.p_id%type,
   p_rstaffid OUT requirement.r_staff_id%type,
   p_demand  requirement.demand%type)
IS
  -- declare the user-defined exception
  invalid_input EXCEPTION;
  CURSOR c_demand IS
  SELECT req_id,p_id,r_staff_id from requirement where demand = upper(p_demand);
BEGIN
  IF p_demand NOT IN ('HIGH','LOW','AVG') THEN
    -- raise the exception if p_demand not one of the 3 accepted values
    RAISE invalid_input;
  END IF;
  FOR i in c_demand Loop
  DBMS_OUTPUT.PUT_LINE('Requirement ID :'||i.req_id);
  DBMS_OUTPUT.PUT_LINE('Product ID'||i.p_id);
  DBMS_OUTPUT.PUT_LINE('Staff ID :'||i.r_staff_id);
  END LOOP;
EXCEPTION WHEN  invalid_input THEN
  dbms_output.put_line('Only HIGH/LOW/AVG are valid input');  
END get_productdetails;