呼叫程序在1行

时间:2014-08-27 13:18:14

标签: sql oracle stored-procedures sqlplus

我有一个关于在Oracle中调用过程的问题。 这就是我所拥有的,这在SQLPlus中运行良好。

VARIABLE resultSet REFCURSOR;
 BEGIN 
  CALL_TEST('10DD', :resultSet);
 END;
 /

但是,下面的代码不起作用,因为它给了我变量的解释,而不是说“PL / SQL过程成功完成。”

VARIABLE resultSet REFCURSOR; BEGIN HUGHES_ARIAL.DUNNING_TEST('1D10', :resultSet); END; /

问题是我需要在每次之后按Enter键; (分号)。有没有办法让我上面的声明只用1行而不必按Enter键?

我正在使用电子邮件广告系列企业软件,但它不允许我在SQLPlus中做我能做的事情。

1 个答案:

答案 0 :(得分:1)

所有SQL*Plus命令都应在一行内。在使用不同的命令时,它必须是多行的。

示例:

SQL> variable test NUMBER;set linesize 0;
Usage: VAR[IABLE] [ <variable> [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) |
                    VARCHAR2 (n [CHAR|BYTE]) | NCHAR | NCHAR (n) |
                    NVARCHAR2 (n) | CLOB | NCLOB | REFCURSOR |
                    BINARY_FLOAT | BINARY_DOUBLE ] ]

可以使用EXEC以这种方式调用您的程序。

VARIABLE resultSet REFCURSOR;

EXEC CALL_TEST('10DD', :resultSet);

OR

VARIABLE resultSet REFCURSOR;

BEGIN CALL_TEST('10DD', :resultSet); END;
/

整个PL/SQL块可能在一行中,在尝试执行时,您必须明确指定'/'作为新行!


如果您担心多行,

将其放入文件并以脚本形式运行。

SQL> !cat my_script.sql
VARIABLE resultSet REFCURSOR;
 BEGIN
  CALL_TEST('10DD', :resultSet);
 END;
 /

SQL> start my_script.sql