【问题标题】:Calculate the substitution variable length in oracle plsql计算oracle plsql中的替换变量长度
【发布时间】:2016-03-29 17:32:48
【问题描述】:

我有一个简单的plsql程序,基本上我想做的是计算名称的长度,它是plsql的动态输入,然后根据长度循环。

当我给出像 v_name = 'Dex' 这样的预定义值时,它可以工作,但是当我给出 v_name = &name 时,它​​会抛出一条错误消息,指出必须声明 Dex。

感谢是否有人能阐明这个问题。请在下面找到错误和程序详细信息:

错误报告: ORA-06550:第 6 行,第 13 列: PLS-00201:必须声明标识符“DEX” ORA-06550:第 6 行,第 3 列: PL/SQL:语句被忽略 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。 *行动:

PLsql 程序:

declare
v_name varchar2(30);
v_loop_count number;
v_len number;
begin
  v_name := &name;
  v_loop_count := 0;
  v_len := length(v_name);
  for v_loop_count in 0 .. v_len-1
  loop
    dbms_output.put_line('Entered Name is :: '||v_name);
  end loop;
end;

【问题讨论】:

  • 您仍然需要在替换变量周围加上引号或将它们包含在您的变量中,因为 Oracle 在您的脚本中进行直接替换,因此引号需要在您的字符串文字周围结束。跨度>
  • 我不同意这是一个印刷错误。 OP 没有忘记单引号;由于替换变量的性质,OP 不知道需要单引号。我正在投票重新开放。

标签: oracle plsql oracle-sqldeveloper


【解决方案1】:

在 SQL Developer(和 sqlplus)中,您可以定义替换变量,例如您正在执行的以 & 开头的操作。但是这些替换变量与代码中的变量或文字不同。这些替换变量只会在代码被解析和执行之前以文本形式替换。

如果你有

v_name := &name;

然后文本替换将产生以下代码:

v_name := Dex;

因为您没有名为 DEX 的变量,所以您会收到您提到的错误。

如 cmets 中所述,将单引号括起来替换变量就是答案。

v_name := '&name';

这将被替换为

v_name := 'Dex';

这就是你想要的——字符串值'Dex'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多