从PHP使用的pl/sql脚本中插入,删除,更新


Insert, delete, update from a pl/sql script use by PHP

我通过PHP应用程序启动了一个pl/sql脚本,但是我注意到当脚本中有插入、更新或删除时,脚本停止了。如果我直接在sqldeveloper中使用此脚本,则没有问题。

要使用insert, delete, update是否需要做一些特别的事情?由于

 procedure update_nbr_execution
 (dem_id in number)
 IS
 BEGIN
UPDATE BCN_DEMANDE_EXTRACTION
    SET nombre_execution = nvl(nombre_execution,0) + 1
    WHERE id = dem_id;
 END;

在我的php文件:

            $query = "BEGIN 
                        ecrire_requete(:demande_id, :p_nom); 
                    END;";
            $stid = oci_parse($conn, $query);
            $tabvars = oci_new_collection($conn,'MYTABLETYPE');
            oci_bind_by_name($stid, ':p_nom', $tabvars, -1, SQLT_NTY);
            oci_bind_by_name($stid, ':demande_id', $_POST['demande_id']);
            oci_execute($stid, OCI_DEFAULT);

update_nbr_executionecrire_requete调用。

update_nbr_execution中有一个触发器,字段日期自动更新为字段nbr_execution。它可能来自触发器吗?

编辑:隔离某些部分后,我现在得到这个错误:ORA-04088: error during execution of trigger。所以它确实来自于这样的触发器:

create or replace
TRIGGER BCN_FORMAT_NOM_FICHIER_BI
BEFORE INSERT OR UPDATE ON BCN_DEMANDE_EXTRACTION
REFERENCING NEW AS NEW
FOR EACH ROW
DECLARE
BEGIN
if inserting then
  :new.FORMAT_NOM_FICHIER_DONNEES:='bcn_<nom_lot>_<id demande>_<n° version>_<description>_<date>.dat';
  :new.FORMAT_NOM_FICHIER_CONTROLE:='bcn_<nom_lot>_<id demande>_<n° version>_<date>.ctr';
  :new.FORMAT_NOM_FICHIER_JETON:='bcn_<nom_lot>_<id demande>_<n° version>_<date>.jet';
  :new.FORMAT_NOM_FICHIER_ZIP:='bcn_<nom_lot>_<id demande>_<n° version>_<date>';
  :new.CREATED_AT:=TO_CHAR(SYSDATE,'DD/MM/YY');
  :new.UPDATED_AT:=TO_CHAR(SYSDATE,'DD/MM/YY');
else
   :new.UPDATED_AT:=TO_CHAR(SYSDATE,'DD/MM/YY');
end if;
END;

可能是日期格式的问题。

如果CREATED_ATUPDATED_AT都是日期,则= TO_CHAR(SYSDATE,'DD/MM/YY')将SYSDATE转换为字符串,然后隐式地将字符串转换回日期。隐式日期转换依赖于NLS_DATE_FORMAT,由每个客户端设置。

你可能有SQL开发者设置使用DD/MM/YY之类的东西,但PHP正在使用其他东西。如果你只是如果你想从SYSDATE中删除时间,你应该使用TRUNC(SYSDATE)