调用过程 returns "success" 但 base 中没有任何变化

Calling a procedure returns "success" but nothing has changed in base

我正在尝试从 php 页面调用存储过程,但没有得到我想要的结果。

我将 oci 与 php 一起使用,查询执行如下所示:

function executeQuery($c, $query){
    $stid = oci_parse($c, $query);
    if (!$stid) {
        $e = oci_error($c);
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    $response['success'] = oci_execute($stid);
    if (!$response['success']) {
        $e = oci_error($stid);
        $response['error'] = $e;
        return $response;
        trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR);
    }
    //oci_commit($c); //auto commit is by default with oci_execute but I've tried this too. 
    oci_free_statement($stid);
}

如果我的 $query 是一个插入,它工作正常并提交插入,但是当它是CALL MY_PROC('VAR1, 'VAR2', VAR3'), $response['success'] 是正确的,但数据库没有任何变化。

如果我在 TOAD 的编辑器中执行 CALL MY_PROC('VAR1', 'VAR2', VAR3') 并提交,它按预期工作 我可以看到数据库中的结果。但是当我从 php.

调用我的程序时不是

我已经尝试使用 EXECUTE 而不是 CALL,在查询末尾添加 COMMIT;,并且 oci_commit($c) 它仍然不会影响数据库。

  • 我做错了什么?这可能是一个提交问题吗?
  • 我该怎么做才能得到错误而不是 "success"?
  • 过程调用的行为可能与插入和选择不同吗?

存储过程调用的包不是我自己编写的,并且有 out 参数,这就是我没有收到错误的原因吗? (再次当我 运行 它在蟾蜍中具有相同的值时它工作正常,并且没有特别显示错误)。

我的程序是这样的:

CREATE OR REPLACE MY_PROC(
    VAR1 IN VARCHAR2,
    VAR2 IN VARCHAR2,
    VAR3 IN VARCHAR2
  )
  IS

  BEGIN
    ERROR_CODE := NULL; --//inherited from the packages, don't really know what do do with them
    ERROR_MSG := NULL;

    IF VAR2 = NULL THEN
      VAR2 := 'DEFAULT';
    END IF;
    PKG_USER.CREATE_USER(VAR1, VAR2, VAR3, ERROR_CODE, ERROR_MSG);

    IF (ERROR_CODE != NULL OR ERROR_MSG != NULL) THEN
      DBMS_OUTPUT.PUT_LINE('ERROR_CODE : ' || ERROR_CODE);
      DBMS_OUTPUT.PUT_LINE('ERROR_MSG: ' || ERROR_MSG);
      RAISE PROGRAM_ERROR; --//tried doing this to catch the errors but doesn't work
    END IF;
  END;
/

我想部分问题出在那些错误的输出参数上,但是当我在其中 运行 TOAD 时,它再次正常工作,没有错误。

编辑:我刚刚意识到,如果我尝试调用一个不存在的过程,比如CALL MYY_PROC() 它仍然没有 return 错误,并且 return "success"。

另一件需要注意的事情是,我在 不同的数据库 上调用了一些过程。在除此之外的所有其他基础上,我通常会出错并调用一个不正确存在的过程 returns:

ORA-06576: not a valid function or procedure name

所以 IMO 它可能是两件事:复制粘贴错误(我现在正在检查)或一些数据库设置,如提到的@cdb_dba。


顺便说一句,我开发这个平台的用途是 php4。显然不是我的选择,不要问。

好吧,我觉得自己很愚蠢,但事实证明,如果您的 $query 变量是 nulloci_execute 将始终 return 成功。

我的变量没有被调用 $query:我已经设置(并回显确认)$queryProcFTTx,但我执行了 $queryProcFttx。我被 VSCode 欺骗了,当我双击变量时忽略大小写。