在php中从pl/sql函数恢复varchar2表
我在pl/sql中创建了一个返回varchar2表的函数,我在sqldeveloper上测试了它,我知道它可以工作。但是现在,我想用一个php项目检索这个表。首先,我试过这个在php中从pl/sql函数恢复varchar2表,php,plsql,Php,Plsql,我在pl/sql中创建了一个返回varchar2表的函数,我在sqldeveloper上测试了它,我知道它可以工作。但是现在,我想用一个php项目检索这个表。首先,我试过这个 oci_bind_by_name($stid,":returnValue",$returnValue); 但我明白了: Warning: oci_execute() [function.oci-execute]: ORA-06550: line 2, column 41: PLS-00382: expression i
oci_bind_by_name($stid,":returnValue",$returnValue);
但我明白了:
Warning: oci_execute() [function.oci-execute]: ORA-06550: line 2, column 41: PLS-00382: expression is of wrong type ORA-06550: line 2, column 25: PL/SQL: Statement ignored in C:\xampp\htdocs\BCN_REQUETEUR\index.php on line 15
然后我试着用这个
oci_bind_array_by_name($stid,":returnValue",$returnValue,250,250);
但我也犯了同样的错误。
那么,我们如何在php中检索这个varchar2表呢?
谢谢
编辑:我终于成功了,我没有使用pl/sql函数,而是使用了一个带有“out参数”的过程,然后在php端:
$query = "BEGIN
ecrire_requete(30, :thesechar);
END;";
$stid = oci_parse($conn, $query);
$tabvars = oci_new_collection($conn,'MYTABLETYPE');
oci_bind_by_name($stid, ':thesechar', $tabvars, -1, SQLT_NTY);
oci_execute($stid, OCI_DEFAULT);
for ($i = 0;$i < count($tabvars);$i++)
{
echo "<br>".$tabvars->getElem($i);
}
$query=“开始
埃克莱尔·雷奎特(30,:塞夏);
结束;“;
$stid=oci_parse($conn$query);
$tabvars=oci_new_集合($conn,'MYTABLETYPE');
oci_按名称绑定($stid,':thescher',$tabvars,-1,SQLT_-NTY);
oci_执行($stid,oci_默认值);
对于($i=0;$i”$tabvars->getElem($i);
}
我认为您可以像这样使用pl/sql……我使用了与您相同的pl/sql脚本,但不是预处理
<?php
$dbServerName = 'localhost';
$dbName = 'CGG1';
$dbUserName = 'SYSTEM';
$dbPassword = 'admin';
$port = 1521;
$c2 = oci_connect($dbUserName, $dbPassword, "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = $dbServerName)(PORT = $port)))(CONNECT_DATA=(SID=$dbName)))");
if($c2)
{
$v = "DECLARE
--var_num1 number;
--var_num2 number;
BEGIN
--var_num1 := 100;
--var_num2 := 200;
DECLARE
var_mult number;
BEGIN
-- AMATIA_TIPO_ADMIN;
delete from AMATIA_TIPO_ADMIN;
Insert into AMATIA_TIPO_ADMIN (ID_TIPO_ADMIN,NOMBRE) values (8,'Vista Contratista');
Insert into AMATIA_TIPO_ADMIN (ID_TIPO_ADMIN,NOMBRE) values (5,'Vista Matriz legal');
Insert into AMATIA_TIPO_ADMIN (ID_TIPO_ADMIN,NOMBRE) values (6,'Superadministrador');
Insert into AMATIA_TIPO_ADMIN (ID_TIPO_ADMIN,NOMBRE) values (7,'Vista Gestor');
select max(ID_TIPO_ADMIN) into var_mult from AMATIA_TIPO_ADMIN;
execute immediate
'DROP SEQUENCE SEQ_AMATIA_TIPO_ADMIN';
var_mult := var_mult + 1 ;
execute immediate
'CREATE SEQUENCE SEQ_AMATIA_TIPO_ADMIN INCREMENT BY 1 START WITH '|| var_mult || ' MAXVALUE 9999999999999999999999999999 MINVALUE 0 CACHE 20';
END;
END;
";
$stid = oci_parse($c2, $v);
$checkExe = oci_execute($stid);
echo $checkExe . "<hr>";
}
else
{
echo "NOT SUCCESS";
}
?>
+1-找到您自己的答案。