create or replace PROCEDURE find_Doctor (p_SSN in number) AS
BEGIN
select drName, drPhone
from clients
where SSN = p_SSN;
END find_Doctor;
我有这个存储过程,我只想从该调用输出结果表。在没有声明临时表的情况下,有没有一种简单的方法可以做到这一点?我不能只是make是一个普通的SQL查询,因为我必须从java程序中调用它。
答案 0 :(得分:0)
在Procedure
中,您需要variable
来保存result
查询的SQL
输出。然后,您可以使用该变量。使用此:
CREATE OR REPLACE PROCEDURE find_Doctor (p_SSN IN NUMBER)
AS
var_nm VARCHAR2 (100);
var_ph NUMBER;
BEGIN
SELECT drName, drPhone
INTO var_nm, var_ph
FROM clients
WHERE SSN = p_SSN;
DBMS_OUTPUT.put_line ('Doc Name - ' || var_nm || 'Doc Ph. No-' || var_ph);
END find_Doctor;
编辑:
我不能只是make是一个普通的SQL查询,因为我必须从中调用它 一个java程序。
然后,您可以使用SYS_REFCUSOR返回结果,该结果可以映射到JDBC ResultSet
。
CREATE OR REPLACE PROCEDURE find_Doctor (p_SSN IN NUMBER,
VAR OUT SYS_REFCURSOR)
AS
BEGIN
OPEN VAR FOR
SELECT drName, drPhone
FROM clients
WHERE SSN = p_SSN;
END find_Doctor;
答案 1 :(得分:0)
您应该定义参数drName和drPhone:
create or replace PROCEDURE find_Doctor (p_SSN in number, p_drName OUT
VARCHAR2, p_drPhone OUT VARCHAR2) AS
BEGIN
select drName, drPhone
into p_drName, p_drPhone
from clients
where SSN = p_SSN;
END find_Doctor;
答案 2 :(得分:0)
简单的方法是学习您使用的工具和最佳实践。
对我来说,最好的方法是删除无意义的程序,只需选择您需要的数据。但是,如果你只是“SP”的话,那就是'您可以使用ref cursor来检索所需的数据:
create or replace function find_Doctor (p_SSN in number)
return sys_refcursor as
v_result sys_refcursor;
BEGIN
open v_result for
select drName, drPhone
from clients
where SSN = p_SSN;
return v_result;
END find_Doctor;