0
 CREATE PROCEDURE Pname(in_empno IN NUMBER out_name OUT VARCHAR2)
 AS
 BEGIN
 select EmpName into out_name from emptable where Empno = in_empno;
 END Pname;

上記の手順で、SELECTクエリが指定された条件で正常に実行されたかどうかを確認するにはどうすればよいですか?

4

3 に答える 3

0

このEXCEPTIONブロックを使用して、行が返されたかどうか、またはその他の例外が発生したかどうかを判別できます。これを試して

BEGIN
 SELECT EmpName into out_name from emptable where Empno = in_empno
 EXCEPTION
     WHEN NO_DATA_FOUND THEN
         out_name := NULL;
END;
于 2012-11-05T06:25:04.377 に答える
0

out_nameパラメータの出力を確認したい場合は、次のようにしてください。

CREATE OR REPLACE PROCEDURE pname (in_empno IN NUMBER, out_name OUT VARCHAR2)
IS
BEGIN
    SELECT  empName 
      INTO  out_name
      FROM  emptable
     WHERE  empno = in_empno;
EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        raise_application_error (
            -20000,
            'Unable to execute procedure because of: ' || SQLERRM
        );
END pname;

この手順は、sqlplusから実行できます。

var ret varchar2(512);

exec pname(2345,:ret);

print ret;

アップデート1

SQLクエリが正常に実行された場合に値を返したい場合、およびエラーが発生した場合は別の値を返し、次のようにします。

CREATE OR REPLACE PROCEDURE pname (in_empno   IN        VARCHAR2,
                                              out_name        OUT VARCHAR2,
                                              returnval   IN OUT NUMBER
                                             )
IS
BEGIN
    SELECT  employee_name
      INTO  out_name
      FROM  employees
     WHERE  emp_number = in_empno;

    returnval := 0;
EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        returnval := 1;

END pname;

そして、SQLPlusからプロシージャを呼び出します。

var ret varchar2(512);
var ret2 number;

exec pname(2346,:ret,:ret2);

print ret;
print ret2;
于 2012-11-05T07:20:09.857 に答える
0

この例では、リターン権のためにもう1つのout変数の使用を停止できますか?そして、フロントエンドで条件をチェックします。たとえば、「out_name」が何らかの方法でnullの不正なハンドルを返す場合、値を返す場合は別の方法で処理されます。どちらが効率的ですか????? Retvalue、またはこのようにする

CREATE OR REPLACE PROCEDURE pname (in_empno   IN   VARCHAR2, out_name OUT VARCHAR2)
IS
BEGIN
SELECT  employee_name
  INTO  out_name
  FROM  employees
 WHERE  emp_number = in_empno;


EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        out_name := NULL;
  END;                                                                                                    
于 2012-11-05T08:14:05.350 に答える