如何从具有 select 语句的 PL/SQL 过程中获取单个输出

How to get single output from PL/SQL procedure having select statement

我正在尝试执行一个 PL/SQL 过程。我每次都收到 nullpointerexception。可能是我返回程序的方式不对。

你能帮我完成这个过程吗?

PROCEDURE p_regidexport(countryid IN varchar2, cropid IN varchar2, productid IN VARCHAR2, pregid out varchar)
IS
 fnc       VARCHAR2(30) := 'P_REGIDEXPORT';
 query     VARCHAR2(10000);
 regid varchar(20);


 BEGIN

select REG_ID into regid from GRS_Registration where LOC_ID =(select loc_id from GRS_location where Country = ' || countryid || ') AND CROP_ID = (select crop_id from GRS_crop where CROP_NM = ' || cropid || ')AND REG_NAME =' || '''' || productid || ''';

pregid := regid;
 sub_log('P_REGIDEXPORT:'||pregid);
dbms_output.put_line(pregid);
EXCEPTION
   WHEN no_data_found THEN
dbms_output.put_line('No record present');      


END P_REGIDEXPORT;

您不需要在参数值中连接。因为它不是动态查询。因此,您可以直接将参数变量传递给您的查询。 确保您的 qry 将 return 一个值。

它只是基于你的代码的想法,你可以根据你的要求尝试。 希望对您有所帮助!!

   create or replace  PROCEDURE p_regidexport(countryid IN varchar2, cropid IN varchar2, productid IN VARCHAR2, pregid out varchar)
    IS
    fnc       VARCHAR2(30) := 'P_REGIDEXPORT';
    query     VARCHAR2(10000);
    regid varchar(20);

    BEGIN
        begin
          select nvl(REG_ID,'0') into regid from GRS_Registration 
          where 
          LOC_ID =(select loc_id from GRS_location where Country = countryid ) AND 
          CROP_ID = (select crop_id from GRS_crop where CROP_NM =  cropid)AND 
          REG_NAME = productid ;
          EXCEPTION
            WHEN no_data_found THEN
                  dbms_output.put_line('No record ');  --- or regid  ='0';  
        end;
        pregid := regid;
        --sub_log('P_REGIDEXPORT:'||pregid);
        dbms_output.put_line(pregid);
        EXCEPTION
        WHEN others THEN
        dbms_output.put_line('No record present' || ' - ' || sqlerrm);      
    END P_REGIDEXPORT;

祝一切顺利!!如果有用,请单击此答案左侧的向上按钮