У нас есть программа AS400 RPGLE, созданная в библиотеке LMTLIB, которая называется ARTEST.
Он имеет один числовой входной параметр, который просто возвращает 2.
$myVar = "1";
$db = Zend_Registry::get('config')->resources->multidb->as400;
$abstractAdapter = new Zend_Db_Adapter_Db2($db);
//Gives the message "Invalid bind-variable position 'myVar'"
$sql = 'CALL QSYS.QCMDEXC(\'CALL LMTLIB.ARTEST PARM(?)\', 0000000026.00000)';
//Gives the message "Token PARM was not valid. Valid tokens: ( INTO USING. SQLCODE=-104"
$sql = 'CALL LMTLIB.ARTEST PARM(?)';
//Gives the message "ARTEST in LMTLIB type *N not found. SQLCODE=-204"
$sql = 'CALL LMTLIB.ARTEST (?)';
$stmt = new Zend_Db_Statement_Db2($abstractAdapter, $sql);
$stmt->bindParam('myVar', $myVar, 4, 1);
$stmt->execute();
Теперь я могу понять, почему третья инструкция SQL завершится ошибкой с сообщением «не найдено»… потому что это не таблица/файл, а скорее программа RPGLE.
Раздражает то, что если я удалю (?) и просто вставлю (1)... вызов SQL окажется успешным, и программа RPGLE покажет, что он был вызван. Однако тогда я не могу увидеть, каков был ответ программы.
Заранее благодарю за любую помощь!