【问题标题】:How i can execute function?我如何执行功能?
【发布时间】:2019-05-26 18:53:21
【问题描述】:

SQL 代码在 Oracle SQL Developer 中有效,但在 PHP PDO 中无效 示例:

    $sql = <<<SQL
      var sss varchar2(1000);
      begin
        :sss := AFACE_WWW_PNAL_SAVE(
          54687,
          10.66,
          'Description'
        );
      end;
SQL;
    $pdo->prepare($sql);
    $pdo->query($sql); -- Exception

错误:SQLSTATE[HY000]:一般错误:900 OCIStmtExecute:ORA-00900:无效的 SQL 语句

如何在“sss”变量中获得结果?

【问题讨论】:

  • var[iable] 是绑定变量的特定于 SQL Developer(和 SQL*Plus/SQLcl)客户端的声明。它不是 SQL 甚至 PL/SQL 语言的一部分。

标签: sql oracle pdo


【解决方案1】:

我不知道那里是否允许使用 PL/SQL 块,但如果允许,您可能会错过开头的 DECLARE

但您不需要 PL/SQL 从函数中获取值。可以查询dual

SELECT aface_www_pnal_save(54687, 10.66, 'Description') sss
       FROM dual;

【讨论】:

  • 然后我可以下一个例外:SQLSTATE[HY000]: General error: 14552 OCIStmtExecute: ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
  • @John:请编辑您的问题并包含函数的定义。
  • @John:在函数中包含 DML 或 DML 或 COMMITROLLBACK 一点都不好。我强烈建议你不要那样做。除此之外,请按照 Oracle 论坛中的建议尝试PRAGMA AUTONOMOUS_TRANSACTION
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多