【问题标题】:use function call in dynamic SQL statement在动态 SQL 语句中使用函数调用
【发布时间】:2016-11-08 14:53:44
【问题描述】:

在存储过程中,我有一个串联的 SQL 语句。这包括选择部分中的大写表达式。实际上,当执行立即命令运行时一切正常。现在我想通过将这个大写表达式打包到一个函数中来使该语句更具可读性,但是无论我尝试什么都失败了。甚至可以在动态 SQL 中调用函数吗?

【问题讨论】:

  • 标记使用的 dbms。
  • 是的,但没有代码或错误不能真正帮助
  • 使用 dbms_output.put_line 检查您的动态 sql 并在单独的块中运行它以查看您遇到的错误以及如何修复它们。
  • 记得在功能上grant execute。如果它因特定错误而失败,请发布错误。
  • 请编辑您的问题以显示您尝试执行的代码,并解释“它失败”的含义。动态执行的 SQL 可以调用函数,因此您需要对发生的情况提供更详细的说明。谢谢。

标签: sql oracle function dynamic


【解决方案1】:

如果您使用的是 12c,并且您只将此函数用于此 sql 语句,则可以在 sql 语句的 WITH 子句中使用 PL/SQL 声明部分

Declare
myvariable number;
Begin

    EXECUTE IMMEDIATE'
    WITH
      FUNCTION with_function(p_id IN NUMBER) RETURN NUMBER IS
      BEGIN
        RETURN p_id * p_id - p_id;
      END;
    SELECT with_function(3)
    FROM   dual
    WHERE  rownum = 1' into myvariable;
    dbms_output.put_line('myvariable: '||myvariable);
    End;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 2020-06-09
    相关资源
    最近更新 更多