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查询是否成功执行?
答案 0 :(得分:0)
您可以使用EXCEPTION
块来确定是否返回了行或是否发生了其他异常。试试这个
BEGIN
SELECT EmpName into out_name from emptable where Empno = in_empno
EXCEPTION
WHEN NO_DATA_FOUND THEN
out_name := NULL;
END;
答案 1 :(得分: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;
此过程可以从sql plus执行
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;
并从sql plus调用该过程为
var ret varchar2(512);
var ret2 number;
exec pname(2346,:ret,:ret2);
print ret;
print ret2;
答案 2 :(得分:0)
在这个例子中,我可以停止使用另一个输出变量来返回权利吗?并检查我的前端条件,如果'out_name'在某种程度上返回null ill句柄,如果它返回值,它将以其他方式处理,哪一个是有效的?????再使用一个out变量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;