您可以通過使用關鍵字的名稱和數據類型聲明之間OUT
定義的輸出參數。 IE:
CREATE OR REPLACE PROCEDURE blah (OUT_PARAM_EXAMPLE OUT VARCHAR2) IS ...
如果未指定,則默認爲IN
。如果要使用參數作爲輸入和輸出,請使用:
CREATE OR REPLACE PROCEDURE blah (INOUT_PARAM_EXAMPLE IN OUT VARCHAR2) IS ...
以下示例使用IN和OUT參數創建過程。然後執行程序並打印結果。
<?php
// Connect to database...
$c = oci_connect("hr", "hr_password", "localhost/XE");
if (!$c) {
echo "Unable to connect: " . var_dump(oci_error());
die();
}
// Create database procedure...
$s = oci_parse($c, "create procedure proc1(p1 IN number, p2 OUT number) as " .
"begin" .
" p2 := p1 + 10;" .
"end;");
oci_execute($s, OCI_DEFAULT);
// Call database procedure...
$in_var = 10;
$s = oci_parse($c, "begin proc1(:bind1, :bind2); end;");
oci_bind_by_name($s, ":bind1", $in_var);
oci_bind_by_name($s, ":bind2", $out_var, 32); // 32 is the return length
oci_execute($s, OCI_DEFAULT);
echo "Procedure returned value: " . $out_var;
// Logoff from Oracle...
oci_free_statement($s);
oci_close($c);
?>
參考:
存儲過程是永久創建還是僅爲此會話創建?我使用這個方法來接收我在數據庫中編譯的過程中的OUT參數(它看起來像是在做同樣的事情,除了首先創建過程)。我想避免在執行此代碼時在數據庫中創建任何永久對象。 – 2010-06-02 13:28:16
@Renderlin:是的,orafaq.com的例子會創建存儲過程。您需要將存儲過程放入匿名PLSQL塊的DECLARE塊中,並在BEGIN/END部分創建'proc1(...')以便不創建該過程。 – 2010-06-02 14:40:24
非常感謝...製作我的日子 – 2010-06-02 18:42:07