"DEFINE" 命令 Oracle 数据库上的 SQL 语句无效

Invalid SQL Statements on "DEFINE" commands Oracle Database

我是 oracle 的新手,当我尝试使用 define 命令时,我遇到了 ORA-00900: invalid SQL statement 错误。这是我的代码:

DEFINE p_num1 = 2;
DEFINE p_num2 = 4;
declare
  b1 number(7,3) := &p_num1;
  b2 number(7,3) := &p_num2;
  v_cont number(7,3);
begin
  v_cont := &p_num1/&p_num2;
  dbms_output.put_line(v_cont);
end;
/

我哪里错了?

我已经很多年没有使用 Oracle 了,但它看起来像 DEFINE only allows you to create text variables。您现在正在用一个数字除以一个字符。

您仍然可以这样做,只需将它们分配给“1”和“2”,然后将它们转换为数字,以便能够对其进行操作。但看起来这样太乱才是正确的做法。

var p_num1 number;
var p_num2 number;

exec :p_num1 := 2;
exec :p_num2 := 4;

col p_num1 new_value p_num1
col p_num2 new_value p_num2

select :p_num1 p_num1
,      :p_num2 p_num2
from dual;


select :p_num1/:p_num2 from dual;
select '&p_num1'/'&p_num2' from dual;


declare
  b1 number(7,3) := :p_num1;
  b2 number(7,3) := :p_num2;
  v_cont number(7,3);
begin
  v_cont := b1/b2;
  dbms_output.put_line(v_cont);
end;
/

输出

PL/SQL procedure successfully completed.


PL/SQL procedure successfully completed.


    P_NUM1     P_NUM2
---------- ----------
     2      4


:P_NUM1/:P_NUM2
---------------
         .5

old   1: select '&p_num1'/'&p_num2' from dual
new   1: select '     2'/'         4' from dual

   '2'/'4'
----------
    .5

.5

PL/SQL procedure successfully completed.

编辑

DEFINE p_num1 = 2;
DEFINE p_num2 = 4;

var p_num1 number;
var p_num2 number;

exec :p_num1 := '&p_num1';
exec :p_num2 := '&p_num2';

declare
  b1 number(7,3) := :p_num1;
  b2 number(7,3) := :p_num2;
  v_cont number(7,3);
begin
  v_cont := :p_num1/:p_num2;
  dbms_output.put_line(v_cont);
end;
/

我认为问题在于,无论您如何 运行 编写您的代码,它都将整个事情视为一个语句。实际上,有三个 - 两个 DEFINEs(这是一个 SQL*Plus 命令,大多数其他 GUI 数据库工具已经复制)和一个 PL/SQL 块。

如果您使用 SQL*Plus to 运行 上面的内容,它应该可以工作,因为每个语句将被单独解释。

如果您使用的是 Toad 或 SQL Developer 之类的东西,并且您想要一个接一个地执行多个语句,那么您需要将它们 运行 作为脚本。

如果您尝试通过一些前端代码(例如 C# 等)执行此操作,那么您可能最好完全避免使用 DEFINE,而只使用绑定变量传递值(尽管我不确定如何使用匿名 PL/SQL 块 - 你必须自己查找!)

预计到达时间: 既然你说你在使用 APEX,也许 this 会有一些用处。