Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL开发人员Oracle,如何调用过程?_Oracle_Plsql_Oracle Sqldeveloper_Execute - Fatal编程技术网

SQL开发人员Oracle,如何调用过程?

SQL开发人员Oracle,如何调用过程?,oracle,plsql,oracle-sqldeveloper,execute,Oracle,Plsql,Oracle Sqldeveloper,Execute,我有过这样的经历: 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

我有过这样的经历:

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);

但是没有成功

执行程序(4)

EXECUTE是一个
SQL*Plus
命令

您有以下选项:

  • 在SQL*Plus中执行
  • 在匿名PL/SQL块中调用它
  • SQL开发人员客户端工具中运行
让我们看看这三种方式:

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
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.
匿名PL/SQL块中

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
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客户端工具中:

  • 转到左侧窗格中的连接
  • 展开过程
  • 右键单击程序上的,然后选择“运行
  • 它将打开一个新窗口,提供输入值,然后单击确定
  • 输出将在底部的输出日志中显示为“输出变量”

  • 是否也提供了out参数?请尝试匿名块:
    beginproc(4);结束@DmitryBychenko不仅仅是这样,因为您还需要输出参数。您会遇到什么错误?您的过程只获取名称、姓氏和总数,而不处理它们。例如,您可以使用dbms_输出将它们打印输出。(您需要在会话的视图菜单中激活sqldeveloper中的dbms_输出以查看实际输出)PL/SQL块有语法错误,无法工作<代码>输入/输出
    用于参数,不用于局部变量。谢谢您的回复,我会的try@dreamPr我添加了两个示例,以适合您的为准。请将其标记为已回答,这样也会帮助他人!我从一开始就对答案投了更高的票,但是经过所有的编辑,现在这个答案太详细了。我要撤回投票。。。开玩笑@弗洛林希塔笑:-)祝你有一个愉快的一天!感谢@Lalit Kumar B提供如此详细的回答。但当过程返回多个变量时,它是如何工作的呢?就像你在O_ENAME的例子中,如果我需要返回多个名称怎么办?