【问题标题】:SQL Developer Oracle, how to call procedure? [duplicate]SQL Developer Oracle,如何调用程序? [复制]
【发布时间】:2016-02-28 03:09:20
【问题描述】:

我有这样的功能:

CREATE or replace PROCEDURE proc
(
  P_ID IN INTEGER,
  NAME OUT CHAR,
  SURNAME OUT CHAR,
  TOTAL OUT CHAR
)
 AS
    BEGIN
        SELECT NAME, SURNAME, sum(TOTAL) AS TOT
          INTO NAME,SURNAME,TOTAL
          FROM STATISTICS, PLAYERS, PERSON
          WHERE STATISTICS.SID=P_ID AND PERSON.ID=PLAYERS.SID AND      
          STATISTICS.PLAYERS_SID=PLAYERS.SID
        GROUP BY NAME,SURNAME;
END;

Select语句可以正常工作,但是在Oracle中如何调用这个过程呢?

我尝试了类似的东西

EXEC proc(4);

DECLARE
  NAME OUT CHAR,
  SURNAME OUT CHAR,
  TOTAL OUT CHAR

BEGIN
   P_ID := 12 ;
   proc (
   P_ID => P_ID,
   NAME => NAME,    
   SURNAME => SURNAME,
   TOTAL => TOTAL
);
END;

但没有任何成功。

【问题讨论】:

  • 你是否也提供了 out 参数?
  • 尝试匿名块:BEGIN proc(4); END;
  • @DmitryBychenko 不仅如此,您还需要参数。
  • 您遇到什么错误?您的程序只是获取姓名 surname 和 total 而对它们不做任何事情。例如,您可以使用 dbms_output 将它们打印到输出。 (您需要在会话的 View 菜单中激活 sqldeveloper 中的 dbms_output 才能看到实际的输出)
  • 您的 PL/SQL 块有语法错误,无法工作。 IN/OUT 用于参数而不是局部变量。

标签: oracle plsql oracle-sqldeveloper execute


【解决方案1】:

执行过程(4);

EXECUTESQL*Plus 命令。

您有以下选择:

  • SQL*Plus 中的执行
  • 在匿名 PL/SQL 块中调用它。
  • SQL Developer 客户端工具中运行

让我们看看所有三种方式:

SQL*Plus 中:

SQL> variable v_ename varchar2(20);
SQL> exec get_emp(7788, :v_ename);

PL/SQL procedure successfully completed.

SQL> print v_ename;

V_ENAME
--------------------------------
SCOTT

匿名 PL/SQL 块中:

SQL> CREATE OR REPLACE PROCEDURE get_emp(
  2      i_empno IN emp.empno%TYPE,
  3      o_ename OUT emp.ename%TYPE)
  4  AS
  5  BEGIN
  6    SELECT ename INTO o_ename FROM emp WHERE empno = i_empno;
  7  END;
  8  /

Procedure created.

SQL> SET serveroutput ON
SQL> DECLARE
  2    v_ename VARCHAR2(20);
  3  BEGIN
  4    get_emp(7788, v_ename);
  5    dbms_output.put_line('Employee name is '||v_ename);
  6  END;
  7  /
Employee name is SCOTT

PL/SQL procedure successfully completed.

SQL Developer客户端工具中:

  1. 转到左侧窗格中的连接
  2. 展开程序

  1. 右键单击程序并选择“运行”。

  1. 它将打开一个新窗口,提供输入值并点击OK

  1. 输出将在底部的输出日志中显示为“输出变量”。

【讨论】:

  • 谢谢回复,我试试
  • @dreamPr 我添加了两个示例,使用适合您的。请将其标记为已回答,也会对其他人有所帮助!
  • 我从一开始就赞成这个答案,但现在经过所有的编辑,它是一个过于详细的答案。我要撤回投票了……开玩笑的!
  • @FlorinGhita LOL :-) 祝你有美好的一天!
  • 感谢@Lalit Kumar B 提供如此详细的答案。但是,当过程返回多个变量时,它是如何工作的呢?就像在您的 O_ENAME 示例中一样,如果我需要返回多个名称怎么办?
猜你喜欢
  • 1970-01-01
  • 2019-12-27
  • 2013-08-30
  • 1970-01-01
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多