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クエリが指定された条件で正常に実行されたかどうかを確認するにはどうすればよいですか?
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クエリが指定された条件で正常に実行されたかどうかを確認するにはどうすればよいですか?
このEXCEPTION
ブロックを使用して、行が返されたかどうか、またはその他の例外が発生したかどうかを判別できます。これを試して
BEGIN
SELECT EmpName into out_name from emptable where Empno = in_empno
EXCEPTION
WHEN NO_DATA_FOUND THEN
out_name := NULL;
END;
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;
この例では、リターン権のためにもう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;