我在从PhP执行Oracle过程时遇到问题。事实上,我正在使用条令来执行它。
有趣的是,除了过程之外,任何其他查询都可以执行/获取。
下面,你可以找到我设法使用的代码,这个Select工作得很好:
$connection = $this->getApplication()->getDataSourceManager()->getEntityConnection();
$stmt = $connection->prepare("SELECT SYSDATE FROM DUAL"); //or any other select works nice
$stmt->execute();
然而,任何程序都不起作用,这就是其中之一:
$connection = $this->getApplication()->getDataSourceManager()->getEntityConnection();
$stmt = $connection->prepare("call prc_nutr_values('$cdfil', '$cdserice', '001', '0000000036', 'S', '$selectdt', '$selectdt')");
$stmt->execute();
上面的过程不会对数据库进行任何更改。这不是他的程序
发现错误!
主要的问题是PhP没有抛出任何错误(我不知道为什么。然而,我以不同的方式进行了交易,创建了一个干净的新连接,它抛出了错误,如下所示:
$entitiesPath = realpath(__DIR__."/../src/");
$isDevMode = true;
$entity_metadata_config = 'Doctrine'ORM'Tools'Setup::createAnnotationMetadataConfiguration(array($entitiesPath), $isDevMode);
$connection_params = array(
'driver' => 'oci8',
'user' => 'user',
'password' => 'pwd',
'host' => 'IP',
'port' => 'port',
'dbname' => 'ORCL',
);
$entity_manager = 'Doctrine'ORM'EntityManager::create($connection_params, $entity_metadata_config);
$conn=$entity_manager->getConnection();
$sql ="CALL FUNCTION_NAME('$param1', '$param2', '$param3', '$param4', '$param5', $param6, $param7)";
$outputMeta = $conn->exec($sql);
通过这种方式连接,我可以收到详细的错误:它是$param6和$param7(非格式化日期)
为了解决这个问题。。。我只是将$param6和$param7替换为TO_DATE("$param6","DATE-FORMAT")和TO_DATE
其中"DATE-FORMAT"是使用的日期格式("MM/DD/YYYY"或其他使用的日期形式)