Overloading в PL/SQL и типы в РНР

si

Administrator
Overloading в PL/SQL и типы в РНР

PHP:
<?
$conn = oci_connect(DB_USER, DB_PASS, DB_BASE);

if (!conn)
	die("Can not connect");

$orasql = <<<EOT
CREATE OR REPLACE PACKAGE T AS

  FUNCTION test1(param1 IN INTEGER) RETURN VARCHAR2;
  FUNCTION test1(param1 IN VARCHAR2) RETURN VARCHAR2;    

END T;
EOT;

if (!$stmt = oci_parse($conn, $orasql))
	die("Error:".__LINE__);

if ( !oci_execute($stmt,OCI_DEFAULT) )
	die("Error:".__LINE__);

$orasql = <<<EOT
CREATE OR REPLACE PACKAGE BODY T AS
   
  FUNCTION test1(param1 IN INTEGER) RETURN VARCHAR2
  IS
  			tmp varchar(30) := 'integer';  
  BEGIN
   	   dbms_output.put_line(tmp);
  	   RETURN tmp;
  END;
    
  FUNCTION test1(param1 IN VARCHAR2) RETURN VARCHAR2
  IS
  			tmp varchar(30) := 'varchar';  
  BEGIN
  	   dbms_output.put_line(tmp);  
  	   RETURN tmp;
  END;  
     
END T;
EOT;

if (!$stmt = oci_parse($conn, $orasql))
	die("Error:".__LINE__);

if ( !oci_execute($stmt,OCI_DEFAULT) )
	die("Error:".__LINE__);
        
$orasql = <<<EOT
DECLARE
	   r1 varchar(100);
	   r2 varchar(100);
	   r3 varchar(100);
BEGIN
	 r1:=t.test1(:inval1);	 
	 r2:=t.test1(:inval2);	 
	 r3:=t.test1(TO_NUMBER(:inval1)); 
	
	 :retval1:=r1;
	 :retval2:=r2;
	 :retval3:=r3;
END;

EOT;

if (!$stmt = oci_parse($conn, $orasql))
	die("Error:".__LINE__);

$int = 1;
$str = '1';

oci_bind_by_name($stmt, ':retval1', $retval1, 30);
oci_bind_by_name($stmt, ':retval2', $retval2, 30);
oci_bind_by_name($stmt, ':retval3', $retval3, 30);

oci_bind_by_name($stmt, ':inval1', $int, 30);
oci_bind_by_name($stmt, ':inval2', $str, 30);

if ( !oci_execute($stmt,OCI_DEFAULT) )
	die("Error:".__LINE__);
else
{
	var_dump($retval1);
	var_dump($retval2);
	var_dump($retval3);
}
?>
результат
string(7) "varchar"
string(7) "varchar"
string(7) "integer"

получается что все переменые из РНР биндятся как string
 

tony2001

TeaM PHPClub
>получается что все переменые из РНР биндятся как string
да, кроме LOB/FILE & ROWID.
сразу после релиза 5-го я добавлю SQL_INT, с которым будут биндиться integer как integer.
 
Сверху