【问题标题】:How to use Substitution in Stored Procedure如何在存储过程中使用替换
【发布时间】:2021-10-31 17:55:19
【问题描述】:

实际上,我正在创建带有替换的存储过程,在尝试编译过程时,我得到了弹出窗口以在编译自身时输入替换值,而不是在执行时弹出窗口。

请分享你的想法来编译程序而不询问替换

【问题讨论】:

  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: oracle plsql plsqldeveloper plsql-package


【解决方案1】:

你不能!在运行语句时,替换变量的作用类似于客户端应用程序中的查找-替换操作;数据库确实没有看到替换变量,因为您正在使用的客户端应用程序已经执行了查找替换操作。对于一个过程,这将是在CREATE PROCEDURE 语句从客户端发送到要编译的数据库时。它不是数据库执行的操作。

如果您在不支持替换变量的客户端(或在关闭替换变量后支持它的客户端中尝试使用,例如,在客户端应用程序中使用命令SET DEFINE OFF),那么您将得到一个编译错误。 db<>fiddle

如果您想使用替换变量,请在调用过程时在匿名块中使用它们。

一个示例过程将接受参数并且没有替换变量:

CREATE PROCEDURE procedure_name(
  p_value IN NUMBER
)
IS
BEGIN
  -- Do something
  DBMS_OUTPUT.PUT_LINE( p_value );
END;
/

然后,当您要执行该过程时,您可以在调用块中使用替换变量:

BEGIN
  procedure_name( &value );
END;
/

【讨论】:

  • **创建过程 proc1(Id in number) AS BEGIN proc2('&value') end; ** 实际上,我尝试在 proc1 过程中执行 proc2,但是在编译自身时它要求替换值,如何在不提供替换值的情况下进行编译。 @MT0
  • 如果你想在编译过程时关闭替换变量,那么stackoverflow.com/questions/7103715/…
【解决方案2】:

在 SQL*Plus 或 Oracle SQL Developer 中,您将使用 SET DEFINE OFF。您使用 PL/SQL Developer 标记(这是我不使用的工具)标记了问题,但是 - 看看 this 是否有帮助。

然而:我建议你不要那样做。如果您正在创建存储过程,请使用它的参数,不要要求替换变量。像这样的:

SQL> set serveroutput on
SQL> create or replace procedure p_test (par_deptno in dept.deptno%type) is
  2  begin
  3    dbms_output.put_line('Department ' || par_deptno);
  4  end;
  5  /

Procedure created.

SQL> exec p_test(10);
Department 10

PL/SQL procedure successfully completed.

您现在可以重用这样的过程,传递您想要的任何参数值。


你现在的做法:

SQL> create or replace procedure p_test is
  2  begin
  3    dbms_output.put_line('Department ' || &par_deptno);
  4  end;
  5  /
Enter value for par_deptno: 25
old   3:   dbms_output.put_line('Department ' || &par_deptno);
new   3:   dbms_output.put_line('Department ' || 25);

Procedure created.

SQL> exec p_test
Department 25

PL/SQL procedure successfully completed.

SQL>

您可以多次运行该过程,但在整个会话期间它始终会显示(即使用)相同的值。一旦您退出并再次登录,程序将始终使用相同的值。

【讨论】:

    猜你喜欢
    • 2017-01-26
    • 2021-06-10
    • 1970-01-01
    • 2011-07-24
    • 2020-12-08
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2011-08-03
    相关资源
    最近更新 更多