从php中的pl/sql函数恢复varchar2表 [英] Recover a table of varchar2 from a pl/sql function in php

查看:86
本文介绍了从php中的pl/sql函数恢复varchar2表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在pl/sql中创建了一个返回varchar2表的函数,我在sqldeveloper上对其进行了测试,并且知道它可以工作.但是现在,我想用php项目检索此表.首先,我尝试过

I made a function in pl/sql that return a table of varchar2, I tested it on sqldeveloper and I know it works. But now, I want to retrieve this table with a php project. First of all, I tried this

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表? 谢谢

But I'm getting the same error. So, how can we retrieve this table of varchar2 in php ? Thanks

我终于成功了,而不是使用pl/sql函数,而是使用了一个带有'out parameter'的过程,然后在php端:

Edit : I finally succeed, instead of using a pl/sql function, I used a procedure with an 'out parameter' and then in the php side :

 $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);
 }

推荐答案

我认为您可以像这样使用pl/sql.

I think You can use pl/sql Like this....I used same pl/sql script Like you but not Preprocedure

<?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";
}
?>

这篇关于从php中的pl/sql函数恢复varchar2表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆