错误(4,5):PLS-00428:此SELECT语句中需要INTO子句

时间:2017-11-20 10:30:18

标签: oracle plsql

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程序中调用它。

3 个答案:

答案 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;